互斥鎖 mutex 的使用

2021-08-11 05:52:17 字數 1024 閱讀 5330

互斥鎖的使用範圍:

互斥鎖(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...