互斥鎖的使用範圍:
互斥鎖(mutex)是在原子操作api的基礎上實現的訊號量行為。互斥鎖不能進行遞迴鎖定或解鎖,能用於互動上下文但是不能用於中斷上下文,同一時間只能有乙個任務持有互斥鎖,而且只有這個任務可以對互斥鎖進行解鎖。當無法獲取鎖時,執行緒進入睡眠等待狀態。
互斥鎖的資料結構:
struct mutex ;
結構體成員說明:
1、atomic_t count;
指示互斥鎖的狀態:1 沒有上鎖,可以獲得;0 被鎖定,不能獲得。初始化為沒有上鎖。
2、spinlock_t wait_lock;
等待獲取互斥鎖中使用的自旋鎖。在獲取互斥鎖的過程中,操作會在自旋鎖的保護中進行。初始化為為鎖定。
3、struct list_head wait_list;
等待互斥鎖的程序佇列。
如何使用互斥鎖
第一步:是要定義一把鎖:
很簡單咯,struct mutex st_mutex_***;
第二步:初始化互斥鎖
mutex_init
第三步 上鎖:
你定義了鎖就是為了使用它,那麼我們就說一下三種上鎖的方法把:
第一,void mutex_lock(struct mutex *lock);
這個函式無法獲得鎖時就會睡眠,直到可以獲取這把鎖,這期間是不能被訊號打斷的。
第二,int mutex_trylock(struct mutex *lock);
看名字就知道是第乙個函式的非阻塞版本,嘗試去加鎖,鎖上了返回1,沒鎖上返回0;
第三, int mutex_lock_interruptible(struct mutex *lock);
和mutex_lock()一樣,也是獲取互斥鎖。在獲得了互斥鎖或進入睡眠直到獲得互斥鎖之後會返回0。如果在等待獲取鎖的時候進入睡眠狀態收到乙個訊號(被訊號打斷睡眠),則返回_einir。
第四步:解鎖
void mutex_unlock(struct mutex *lock);
c 互斥鎖(Mutex)使用詳解
互斥鎖 mutex 互斥鎖是乙個互斥的同步物件,意味著同一時間有且僅有乙個執行緒可以獲取它。互斥鎖可適用於乙個共享資源每次只能被乙個執行緒訪問的情況 函式 建立乙個處於未獲取狀態的互斥鎖 public mutex 如果owned為true,互斥鎖的初始狀態就是被主線程所獲取,否則處於未獲取狀態 pu...
互斥鎖mutex的使用方法
一,鎖的建立 鎖可以被動態或靜態建立,可以用巨集pthread mutex initializer來靜態的初始化鎖,採用這種方式比較容易理解,互斥鎖是pthread mutex t的結構體,而這個巨集是乙個結構常量,如下可以完成靜態的初始化鎖 pthread mutex t mutex pthrea...
c 互斥鎖mutex使用方法
多執行緒修改基本資料型別時,也可能出現同步問題,哪怕時最簡單的累加操作。通過mutex在對同乙個資料操作時加鎖,實現了對資源的獨佔。pragma once include include include include using namespace std class mutextest prin...