-
Notifications
You must be signed in to change notification settings - Fork 7
/
bs_lock.h
40 lines (31 loc) · 753 Bytes
/
bs_lock.h
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
30
31
32
33
34
35
36
37
38
39
40
/**
* file : bs_lock.h
* author : bushaofeng
* create : 2013-11-19 23:00
* func :
*/
#ifndef __BS_LOCK_H_
#define __BS_LOCK_H_
#include "bs_type.h"
#include "bs_error.h"
#ifdef __cplusplus
extern "C"{
#endif
typedef int bs_lock_t;
#define SPINLOCK_INIT(lock) ((lock)=0)
#define SPINLOCK_LOCK(lock) while(++lock>1){ \
--lock; \
}
#define SPINLOCK_TRYLOCK(lock) (++lock==1 ? BS_SUCCESS:(--lock))
#define SPINLOCK_UNLOCK(lock) (--lock)
void bs_lock_init(bs_lock_t* lock);
void bs_rdlock(bs_lock_t* lock);
state_t bs_rdlock_try(bs_lock_t* lock);
state_t bs_rdlock_unlock(bs_lock_t* lock);
void bs_wrlock(bs_lock_t* lock);
state_t bs_wrlock_try(bs_lock_t* lock);
void bs_wrlock_unlock(bs_lock_t* lock);
#ifdef __cplusplus
}
#endif
#endif