obconnector-c/include/ob_rwlock.h
2024-06-12 13:51:27 +08:00

87 lines
2.8 KiB
C

/************************************************************************
Copyright (c) 2021 OceanBase.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02111-1301, USA
Part of this code includes code from PHP's mysqlnd extension
(written by Andrey Hristov, Georg Richter and Ulf Wendel), freely
*************************************************************************/
#ifndef _OB_RWLOCK_H
#define _OB_RWLOCK_H
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _WIN32
#include <windows.h>
typedef CRITICAL_SECTION ob_mutex_t;
typedef int ob_mutexattr_t;
typedef struct st_my_rw_lock_t
{
SRWLOCK ob_srwlock;
BOOL is_exclusive;
} ob_rw_lock_t;
#define OB_RW_INITIALIZER {SRWLOCK_INIT, FALSE}
#else
#include <pthread.h>
typedef pthread_mutexattr_t ob_mutexattr_t;
typedef pthread_mutex_t ob_mutex_t;
typedef pthread_rwlock_t ob_rw_lock_t;
#define OB_RW_INITIALIZER PTHREAD_RWLOCK_INITIALIZER
#endif
typedef ob_mutex_t native_mutex_t;
typedef ob_mutexattr_t native_mutexattr_t;
typedef ob_rw_lock_t native_rw_lock_t;
#ifndef NATIVE_RW_INITIALIZER
#define NATIVE_RW_INITIALIZER OB_RW_INITIALIZER
#endif
/* Compatible with previous functions */
#define native_mutex_init ob_mutex_init
#define native_mutex_lock ob_mutex_lock
#define native_mutex_trylock ob_mutex_trylock
#define native_mutex_unlock ob_mutex_unlock
#define native_mutex_destroy ob_mutex_destroy
#define native_rw_init ob_rw_init
#define native_rw_rdlock ob_rw_rdlock
#define native_rw_tryrdlock ob_rw_tryrdlock
#define native_rw_wrlock ob_rw_wrlock
#define native_rw_trywrlock ob_rw_trywrlock
#define native_rw_destroy ob_rw_destroy
#define native_rw_unlock ob_rw_unlock
int ob_mutex_init(ob_mutex_t *mutex, const ob_mutexattr_t *attr);
int ob_mutex_lock(ob_mutex_t *mutex);
int ob_mutex_trylock(ob_mutex_t *mutex);
int ob_mutex_unlock(ob_mutex_t *mutex);
int ob_mutex_destroy(ob_mutex_t *mutex);
int ob_rw_init(ob_rw_lock_t *rwp);
int ob_rw_destroy(ob_rw_lock_t *rwp);
int ob_rw_rdlock(ob_rw_lock_t *rwp);
int ob_rw_tryrdlock(ob_rw_lock_t *rwp);
int ob_rw_wrlock(ob_rw_lock_t *rwp);
int ob_rw_trywrlock(ob_rw_lock_t *rwp);
int ob_rw_unlock(ob_rw_lock_t *rwp);
#ifdef __cplusplus
}
#endif
#endif