|
29 | 29 | #if 0 /* debugging */ |
30 | 30 | #define LOCK(mutex) (rfbLog("%s:%d LOCK(%s,0x%x)\n",__FILE__,__LINE__,#mutex,&(mutex)), pthread_mutex_lock(&(mutex))) |
31 | 31 | #define UNLOCK(mutex) (rfbLog("%s:%d UNLOCK(%s,0x%x)\n",__FILE__,__LINE__,#mutex,&(mutex)), pthread_mutex_unlock(&(mutex))) |
| 32 | +#define RDLOCK(rwlock) (rfbLog("%s:%d RDLOCK(%s,0x%x)\n",__FILE__,__LINE__,#rwlock,&(rwlock)), pthread_rwlock_rdlock(&(rwlock))) |
| 33 | +#define WRLOCK(rwlock) (rfbLog("%s:%d WRLOCK(%s,0x%x)\n",__FILE__,__LINE__,#rwlock,&(rwlock)), pthread_rwlock_wrlock(&(rwlock))) |
| 34 | +#define RWUNLOCK(rwlock) (rfbLog("%s:%d RWUNLOCK(%s,0x%x)\n",__FILE__,__LINE__,#rwlock,&(rwlock)), pthread_rwlock_unlock(&(rwlock))) |
32 | 35 | #define MUTEX(mutex) pthread_mutex_t (mutex) |
33 | 36 | #define INIT_MUTEX(mutex) (rfbLog("%s:%d INIT_MUTEX(%s,0x%x)\n",__FILE__,__LINE__,#mutex,&(mutex)), pthread_mutex_init(&(mutex),NULL)) |
34 | 37 | #define TINI_MUTEX(mutex) (rfbLog("%s:%d TINI_MUTEX(%s)\n",__FILE__,__LINE__,#mutex), pthread_mutex_destroy(&(mutex))) |
|
37 | 40 | #define COND(cond) pthread_cond_t (cond) |
38 | 41 | #define INIT_COND(cond) (rfbLog("%s:%d INIT_COND(%s)\n",__FILE__,__LINE__,#cond), pthread_cond_init(&(cond),NULL)) |
39 | 42 | #define TINI_COND(cond) (rfbLog("%s:%d TINI_COND(%s)\n",__FILE__,__LINE__,#cond), pthread_cond_destroy(&(cond))) |
| 43 | +#define RWLOCK(rwlock) pthread_rwlock_t (rwlock) |
| 44 | +#define INIT_RWLOCK(rwlock) (rfbLog("%s:%d INIT_RWLOCK(%s)\n",__FILE__,__LINE__,#rwlock), pthread_rwlock_init(&(rwlock),NULL)) |
| 45 | +#define TINI_RWLOCK(rwlock) (rfbLog("%s:%d TINI_RWLOCK(%s)\n",__FILE__,__LINE__,#rwlock), pthread_rwlock_destroy(&(rwlock))) |
40 | 46 | #define IF_PTHREADS(x) x |
| 47 | +#define THREAD_ROUTINE_RETURN_TYPE void* |
| 48 | +#define THREAD_ROUTINE_RETURN_VALUE NULL |
| 49 | +#define THREAD_SLEEP_MS(ms) usleep(ms*1000) |
| 50 | +#define THREAD_JOIN(thread) pthread_join(thread, NULL) |
| 51 | +#define CURRENT_THREAD_ID pthread_self() |
41 | 52 | #else |
42 | 53 | #if !NONETWORK |
43 | 54 | #define LOCK(mutex) pthread_mutex_lock(&(mutex)) |
44 | 55 | #define UNLOCK(mutex) pthread_mutex_unlock(&(mutex)) |
| 56 | +#define RDLOCK(rwlock) pthread_rwlock_rdlock(&(rwlock)) |
| 57 | +#define WRLOCK(rwlock) pthread_rwlock_wrlock(&(rwlock)) |
| 58 | +#define RWUNLOCK(rwlock) pthread_rwlock_unlock(&(rwlock)) |
45 | 59 | #endif |
46 | 60 | #define MUTEX(mutex) pthread_mutex_t (mutex) |
47 | 61 | #define MUTEX_SIZE (sizeof(pthread_mutex_t)) |
|
52 | 66 | #define COND(cond) pthread_cond_t (cond) |
53 | 67 | #define INIT_COND(cond) pthread_cond_init(&(cond),NULL) |
54 | 68 | #define TINI_COND(cond) pthread_cond_destroy(&(cond)) |
| 69 | +#define RWLOCK(rwlock) pthread_rwlock_t (rwlock) |
| 70 | +#define INIT_RWLOCK(rwlock) pthread_rwlock_init(&(rwlock),NULL) |
| 71 | +#define TINI_RWLOCK(rwlock) pthread_rwlock_destroy(&(rwlock)) |
55 | 72 | #define IF_PTHREADS(x) x |
56 | 73 | #define THREAD_ROUTINE_RETURN_TYPE void* |
57 | 74 | #define THREAD_ROUTINE_RETURN_VALUE NULL |
|
63 | 80 | #include <process.h> |
64 | 81 | #define LOCK(mutex) EnterCriticalSection(&(mutex)) |
65 | 82 | #define UNLOCK(mutex) LeaveCriticalSection(&(mutex)) |
| 83 | +#define RDLOCK(rwlock) LOCK((rwlock)) |
| 84 | +#define WRLOCK(rwlock) LOCK((rwlock)) |
| 85 | +#define RWUNLOCK(rwlock) UNLOCK((rwlock)) |
66 | 86 | #define MUTEX(mutex) CRITICAL_SECTION (mutex) |
67 | 87 | #define MUTEX_SIZE (sizeof(CRITICAL_SECTION)) |
68 | 88 | #define INIT_MUTEX(mutex) InitializeCriticalSection(&(mutex)) |
|
72 | 92 | #define COND(cond) CONDITION_VARIABLE (cond) |
73 | 93 | #define INIT_COND(cond) InitializeConditionVariable(&(cond)); |
74 | 94 | #define TINI_COND(cond) |
| 95 | +#define RWLOCK(rwlock) MUTEX((rwlock)) |
| 96 | +#define INIT_RWLOCK(rwlock) INIT_MUTEX((rwlock)) |
| 97 | +#define TINI_RWLOCK(rwlock) TINI_MUTEX((rwlock)) |
75 | 98 | #define IF_PTHREADS(x) |
76 | 99 | #define THREAD_ROUTINE_RETURN_TYPE void |
77 | 100 | #define THREAD_ROUTINE_RETURN_VALUE |
|
0 commit comments