add function init_pthread_rwlock

pull/37/merge
YuQing 2021-08-13 21:10:05 +08:00
parent 2fafa215fd
commit b7ecd0d4c4
3 changed files with 85 additions and 1 deletions

View File

@ -1,8 +1,9 @@
Version 1.54 2021-08-11 Version 1.54 2021-08-13
* fast_allocator.[hc]: correct reclaim_interval logic * fast_allocator.[hc]: correct reclaim_interval logic
* shared_func.[hc]: add functions getFileContentEx1 and getFileContent1 * shared_func.[hc]: add functions getFileContentEx1 and getFileContent1
* fc_queue.[hc]: add function fc_queue_timedpeek * fc_queue.[hc]: add function fc_queue_timedpeek
* pthread_func.[hc]: add function init_pthread_rwlock
Version 1.53 2021-06-30 Version 1.53 2021-06-30
* process_action support action status * process_action support action status

View File

@ -71,6 +71,49 @@ int init_pthread_lock(pthread_mutex_t *pthread_lock)
return 0; return 0;
} }
int init_pthread_rwlock(pthread_rwlock_t *rwlock)
{
pthread_rwlockattr_t attr;
int result;
if ((result=pthread_rwlockattr_init(&attr)) != 0) {
logError("file: "__FILE__", line: %d, "
"call pthread_rwlockattr_init fail, "
"errno: %d, error info: %s",
__LINE__, result, STRERROR(result));
return result;
}
#ifdef OS_LINUX
if ((result=pthread_rwlockattr_setkind_np(&attr,
PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP)) != 0)
{
logError("file: "__FILE__", line: %d, "
"call pthread_rwlockattr_settype fail, "
"errno: %d, error info: %s",
__LINE__, result, STRERROR(result));
return result;
}
#endif
if ((result=pthread_rwlock_init(rwlock, &attr)) != 0) {
logError("file: "__FILE__", line: %d, "
"call pthread_rwlock_init fail, "
"errno: %d, error info: %s",
__LINE__, result, STRERROR(result));
return result;
}
if ((result=pthread_rwlockattr_destroy(&attr)) != 0) {
logError("file: "__FILE__", line: %d, "
"call thread_rwlockattr_destroy fail, "
"errno: %d, error info: %s",
__LINE__, result, STRERROR(result));
return result;
}
return 0;
}
int init_pthread_attr(pthread_attr_t *pattr, const int stack_size) int init_pthread_attr(pthread_attr_t *pattr, const int stack_size)
{ {
size_t old_stack_size; size_t old_stack_size;

View File

@ -32,6 +32,7 @@ extern "C" {
#endif #endif
int init_pthread_lock(pthread_mutex_t *pthread_lock); int init_pthread_lock(pthread_mutex_t *pthread_lock);
int init_pthread_rwlock(pthread_rwlock_t *rwlock);
int init_pthread_attr(pthread_attr_t *pattr, const int stack_size); int init_pthread_attr(pthread_attr_t *pattr, const int stack_size);
int init_pthread_lock_cond_pair(pthread_lock_cond_pair_t *lcp); int init_pthread_lock_cond_pair(pthread_lock_cond_pair_t *lcp);
@ -63,6 +64,45 @@ void destroy_pthread_lock_cond_pair(pthread_lock_cond_pair_t *lcp);
} while (0) } while (0)
#define PTHREAD_RWLOCK_WRLOCK(rwlock) \
do { \
int rwlock_res; \
if ((rwlock_res=pthread_rwlock_wrlock(rwlock)) != 0) \
{ \
logWarning("file: "__FILE__", line: %d, " \
"call pthread_rwlock_wrlock fail, " \
"errno: %d, error info: %s", \
__LINE__, rwlock_res, STRERROR(rwlock_res)); \
} \
} while (0)
#define PTHREAD_RWLOCK_RDLOCK(rwlock) \
do { \
int rwlock_res; \
if ((rwlock_res=pthread_rwlock_rdlock(rwlock)) != 0) \
{ \
logWarning("file: "__FILE__", line: %d, " \
"call pthread_rwlock_rdlock fail, " \
"errno: %d, error info: %s", \
__LINE__, rwlock_res, STRERROR(rwlock_res)); \
} \
} while (0)
#define PTHREAD_RWLOCK_UNLOCK(rwlock) \
do { \
int unlock_res; \
if ((unlock_res=pthread_rwlock_unlock(rwlock)) != 0) \
{ \
logWarning("file: "__FILE__", line: %d, " \
"call pthread_rwlock_unlock fail, " \
"errno: %d, error info: %s", \
__LINE__, unlock_res, STRERROR(unlock_res)); \
} \
} while (0)
#define lcp_timedwait_sec(lcp, timeout) \ #define lcp_timedwait_sec(lcp, timeout) \
fc_timedwait_sec(&(lcp)->lock, &(lcp)->cond, timeout) fc_timedwait_sec(&(lcp)->lock, &(lcp)->cond, timeout)