⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utils_mutex.h

📁 Path MPICH-V for MPICH the MPI Implementation
💻 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 + -