locked_list.h adds macros: locked_list_empty, locked_list_first_entry etc.

pull/37/merge
YuQing 2021-08-17 15:39:01 +08:00
parent c6b2c32fe2
commit ebe7d87ca4
2 changed files with 28 additions and 1 deletions

View File

@ -48,6 +48,15 @@ extern "C" {
PTHREAD_MUTEX_UNLOCK(&list->lock); PTHREAD_MUTEX_UNLOCK(&list->lock);
} }
static inline int locked_list_empty(FCLockedList *list)
{
int empty;
PTHREAD_MUTEX_LOCK(&list->lock);
empty = fc_list_empty(&list->head);
PTHREAD_MUTEX_UNLOCK(&list->lock);
return empty;
}
static inline int locked_list_count(FCLockedList *list) static inline int locked_list_count(FCLockedList *list)
{ {
int count; int count;
@ -57,6 +66,24 @@ extern "C" {
return count; return count;
} }
#define locked_list_first_entry(list, type, member, var) \
PTHREAD_MUTEX_LOCK(&(list)->lock); \
var = fc_list_first_entry(&(list)->head, type, member); \
PTHREAD_MUTEX_UNLOCK(&(list)->lock)
#define locked_list_last_entry(list, type, member, var) \
PTHREAD_MUTEX_LOCK(&(list)->lock); \
var = fc_list_last_entry(&(list)->head, type, member); \
PTHREAD_MUTEX_UNLOCK(&(list)->lock)
#define locked_list_pop(list, type, member, var) \
PTHREAD_MUTEX_LOCK(&(list)->lock); \
var = fc_list_first_entry(&(list)->head, type, member); \
if (var != NULL) { \
fc_list_del_init(&var->member); \
} \
PTHREAD_MUTEX_UNLOCK(&(list)->lock)
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif