1. 程式人生 > >互斥體、原子操作、自旋鎖、訊號量

互斥體、原子操作、自旋鎖、訊號量

一、互斥體

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);

四、訊號量