一、互斥体
struct mutex my_mutex;//定义mutex
mutex_init(&my_mutex);//初始化mutex
mutex_lock(&my_mutex);//获取mutex
... //临界资源
mutex_unlock(&my_mutex);//释放mutex
二、原子操作
1、定义
原子操作指的是在执行过程中不会被中断的操作。
2、整型原子操作
1)设置原子变量的值
void atomic_set(atomic_t *v, int i);//设置原子变量的值为i
atomic_t v = ATOMIC_INIT(0);//定义原子变量v并初始化为0
2)获取原子变量的值
atomic_read(atomic_t *v);
3)原子变量加/减,原子变量自增/自减
void atomic_add(int i, atomic_t *v);
void atomic_sub(int i, atomic_t *v);
void atomic_inc(atomic_t *v);
void atomic_dec(atomic_t *v);
4)操作并测试
int atomic_inc_and_test(atomic_t *v);
int atomic_dec_and_test(atomic_t *v);
int atomic_sub_and_test(int i, atomic_t *v);
上述操作对原子变量执行自增、自减和减操作后测试是否为0,为0返回true,否则返回false。
3、位原子操作
。。。。。。//详见《Linux设备驱动开发详解》P138
三、自旋锁
spinlock_t lock;
spin_lock_init(&lock);
spin_lock(&lock);
.../临界区
spin_unlock(&lock);
四、信号量