summaryrefslogtreecommitdiff
path: root/c_src/include/linux/rwsem.h
blob: f851d6a2f2b7306df3d9d28ae5d0c524089d42e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#ifndef __TOOLS_LINUX_RWSEM_H
#define __TOOLS_LINUX_RWSEM_H

#include <pthread.h>

struct rw_semaphore {
	pthread_rwlock_t	lock;
};

#define __RWSEM_INITIALIZER(name)				\
	{ .lock = PTHREAD_RWLOCK_INITIALIZER }

#define DECLARE_RWSEM(name) \
	struct rw_semaphore name = __RWSEM_INITIALIZER(name)

static inline void init_rwsem(struct rw_semaphore *lock)
{
	pthread_rwlock_init(&lock->lock, NULL);
}

#define down_read(l)		pthread_rwlock_rdlock(&(l)->lock)
#define down_read_killable(l)	(pthread_rwlock_rdlock(&(l)->lock), 0)
#define down_read_trylock(l)	(!pthread_rwlock_tryrdlock(&(l)->lock))
#define up_read(l)		pthread_rwlock_unlock(&(l)->lock)

#define down_write(l)		pthread_rwlock_wrlock(&(l)->lock)
#define up_write(l)		pthread_rwlock_unlock(&(l)->lock)

#endif /* __TOOLS_LINUX_RWSEM_H */