一、互斥體
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 發現特定記憶體塊需要分配時,它擁有執行分配的執行權力,並...