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

2021-06-14 22:27:29 字數 1067 閱讀 3798

一、互斥體

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

四、訊號量

自旋鎖,互斥鎖,訊號量

自旋鎖,互斥鎖,訊號量 樂觀鎖和悲觀鎖只是一種理論,是從思想上劃分的。自旋鎖和互斥鎖是應用層確確實實的鎖,用於同步訪問控制 如果一定要劃分,從只有乙個執行緒可以擁有鎖來說,我覺得自旋鎖和互斥鎖應該都屬於悲觀鎖,因為一般的應用不需要支援事物回滾的操作。但是沈詢的直播中說,互斥鎖屬於悲觀鎖 sleep ...

訊號量,互斥鎖,自旋鎖

個人理解 訊號量 程序間的通訊機制 單一個數的訊號 與訊息郵箱,訊息佇列,機理類同,量不同,用訊號量肯定掉cpu 自旋鎖 保護區域不掉cpu,持續查詢,等待 不可用時域長狀態 切記 時域範圍 在程序間的通訊機制函式狀態 鎖 0 互斥鎖與自旋鎖 互斥鎖 執行緒會從sleep 加鎖 running 解鎖...

訊號量與自旋鎖 2 訊號量和互斥體

1.引言 下面我們研究如何為共享資源新增鎖定.我們的目的是使所有對共享資源的操作都是原子的,也就是說,在操作該共享資源的其他執行緒執行前,本執行緒對該資源的整個操作就已經完成了.對我們下面要說的記憶體洩露的舉例來說,需要確保當乙個執行緒 如b 發現特定記憶體塊需要分配時,它擁有執行分配的執行權力,並...