📄 utils_mutex.h
字号:
#ifndef MUTEX_H_HAS_BEEN_INCLUDED#define MUTEX_H_HAS_BEEN_INCLUDED#include "config.h"#include <pthread.h>#include "debug.h"#ifdef USE_PTHREADS#define MUTEX_TYPE pthread_mutex_t#define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER#define CREATE_MUTEX( MUTEX ) \ printi( "mutex", "Create MUTEX %s\n", (#MUTEX) ); \ if( pthread_mutex_init( &MUTEX, NULL ) != 0 ) { \ printe( "Can't initialise the mutex %s\n", #MUTEX ); \ }#define DESTROY_MUTEX( MUTEX ) \ printi( "mutex", "Preparing to destroy mutex %s\n", (#MUTEX) ); \ if( pthread_mutex_destroy( &MUTEX ) != 0 ) { \ qerror( "Can't destroy the mutex %s\n", (#MUTEX) ); \ }#define MUTEX_INIT( MUTEX, PVAL ) pthread_mutex_init( &(MUTEX), PVAL ); \ printi( "mutex", "Mutex %s(%p) init to %s\n", (#MUTEX), (&(MUTEX)), (#PVAL) );#define MUTEX_LOCK( MUTEX ) printi( "mutex", "Mutex %s(%p) LOCK !!!\n", (#MUTEX), (&(MUTEX)) ); \ pthread_mutex_lock( &(MUTEX) ); \ printi( "mutex", "Thread inside critical section\n" );#define MUTEX_UNLOCK( MUTEX ) printi( "mutex", "Mutex %s(%p) UNLOCK !!!\n", (#MUTEX), (&(MUTEX)) ); \ pthread_mutex_unlock( &(MUTEX) ); \ printi( "mutex", "Thread outside critical section\n" );#define MUTEX_TRYLOCK( MUTEX ) pthread_mutex_trylock( &(MUTEX) )#define ENTER_CRITICAL_SECTION( MUTEX ) MUTEX_LOCK( MUTEX )#define LEAVE_CRITICAL_SECTION( MUTEX ) MUTEX_UNLOCK( MUTEX )#ifdef _GNU_SOURCE#define RW_LOCK_UNLOCK PTHREAD_RWLOCK_INITIALIZER#define READ_WRITE_LOCK_TYPE pthread_rwlock_t#define INIT_RW_LOCK(LOCK) pthread_rwlock_init( &(LOCK), NULL );#define WRITE_LOCK(LOCK) pthread_rwlock_wrlock( &(LOCK) )#define WRITE_UNLOCK( LOCK ) pthread_rwlock_unlock( &(LOCK) )#define READ_LOCK(LOCK) pthread_rwlock_rdlock( &(LOCK) )#define READ_UNLOCK(LOCK) pthread_rwlock_unlock( &(LOCK) )#else#define RW_LOCK_UNLOCK PTHREAD_MUTEX_INITIALIZER#define READ_WRITE_LOCK_TYPE MUTEX_TYPE#define INIT_RW_LOCK(LOCK) MUTEX_INIT(LOCK, NULL)#define WRITE_LOCK(LOCK) MUTEX_LOCK(LOCK)#define WRITE_UNLOCK( LOCK ) MUTEX_UNLOCK(LOCK)#define READ_LOCK(LOCK) MUTEX_LOCK(LOCK)#define READ_UNLOCK(LOCK) MUTEX_UNLOCK(LOCK)#endif /* _GNU_SOURCE */#else /* USE_PTHREADS */#define MUTEX_TYPE pthread_mutex_t#define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER#define CREATE_MUTEX( MUTEX )#define DESTROY_MUTEX( MUTEX )#define MUTEX_INIT( MUTEX, PVAL ) #define MUTEX_LOCK( MUTEX ) #define MUTEX_UNLOCK( MUTEX ) #define MUTEX_TRYLOCK( MUTEX ) #define ENTER_CRITICAL_SECTION( MUTEX ) MUTEX_LOCK( MUTEX )#define LEAVE_CRITICAL_SECTION( MUTEX ) MUTEX_UNLOCK( MUTEX )#ifdef _GNU_SOURCE#define RW_LOCK_UNLOCK PTHREAD_RWLOCK_INITIALIZER#define READ_WRITE_LOCK_TYPE #define INIT_RW_LOCK(LOCK) #define WRITE_LOCK(LOCK) #define WRITE_UNLOCK( LOCK ) #define READ_LOCK(LOCK) #define READ_UNLOCK(LOCK) #else#define RW_LOCK_UNLOCK PTHREAD_MUTEX_INITIALIZER#define READ_WRITE_LOCK_TYPE MUTEX_TYPE#define INIT_RW_LOCK(LOCK) MUTEX_INIT(LOCK, NULL)#define WRITE_LOCK(LOCK) MUTEX_LOCK(LOCK)#define WRITE_UNLOCK( LOCK ) MUTEX_UNLOCK(LOCK)#define READ_LOCK(LOCK) MUTEX_LOCK(LOCK)#define READ_UNLOCK(LOCK) MUTEX_UNLOCK(LOCK)#endif /* _GNU_SOURCE */#endif /* USE_PTHREADS */#endif /* MUTEX_H_HAS_BEEN_INCLUDED */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -