22 lines
572 B
C
22 lines
572 B
C
#ifndef __MY_MUTEX_H__
|
|
#define __MY_MUTEX_H__
|
|
#include <pthread.h>
|
|
|
|
/**
|
|
* Макрос для pthread_mutex_t
|
|
* Использовать так:
|
|
* with_lock(&mtx)
|
|
* {
|
|
* secured_code();
|
|
* }
|
|
*/
|
|
|
|
#define __MY_MUTEX__CONCAT(x, y) x##y
|
|
#define __MY_MUTEX__UNIQUE_NAME(base) __MY_MUTEX__CONCAT(base, __LINE__)
|
|
|
|
#define with_lock(mutex) \
|
|
for (int __MY_MUTEX__UNIQUE_NAME(_once) = (pthread_mutex_lock(mutex), 1); \
|
|
__MY_MUTEX__UNIQUE_NAME(_once); \
|
|
pthread_mutex_unlock(mutex), __MY_MUTEX__UNIQUE_NAME(_once) = 0)
|
|
|
|
#endif //ifndef __MY_MUTEX_H__
|