c c 多執行緒 mutex的理解

2022-05-18 01:31:04 字數 1161 閱讀 3753

例子:用mutex a鎖門,用metex b去開門,結果沒開啟,就導致了程式的死鎖。

注意:這個程式專門為了測試,mutex的問題。

#include #include #include #include #include #include using namespace std;

class data_protect;

mutex m;

mutex m1;

public:

void add_list(int val)

bool contains(int val)

};void func(data_protect& dp)

int main()

for(auto& s : dp.alist)

pthread_exit(null);

}

執行結果:死鎖,程式永遠在等待鎖的開啟。

執行結果分析:

從③處開始就開了乙個新的執行緒a,執行緒a呼叫了add_list()方法,add_list方法裡,在①處是用m去上的鎖。main函式執行緒在④處也呼叫了,add_list()方法,進去後,發現是上鎖的狀態,所以就阻塞在**,等著鎖開啟後,main函式執行緒好進去,然後在⑤處呼叫了contains方法,contains方法試圖在②處用m1去解m的鎖,所以就解不開①處的鎖,所以就導致了乙個執行緒一直等在①處的鎖的地方,就導致了死鎖。

如果把②處的m1.unlock();換成m.unlock();就能解開鎖了,就不會導致死鎖。

多執行緒同步Mutex

經典執行緒同步問題 互斥量mutex include include include long g nnum unsigned int stdcall fun void ppm unsigned int stdcall fun1 void ppm unsigned int stdcall fun2 ...

C 多執行緒 Mutex

dotnet 2010 05 29 19 07 24 閱讀151 字型大小 大 中小訂閱 互斥鎖 mutex 互斥鎖是乙個互斥的同步物件,意味著同一時間有且僅有乙個執行緒可以獲取它。互斥鎖可適用於乙個共享資源每次只能被乙個執行緒訪問的情況 函式 建立乙個處於未獲取狀態的互斥鎖 public mute...

用mutex同步多執行緒

include include dword winapi threadproc1 lpvoid lpparameter dword winapi threadproc2 lpvoid lpparameter int index 0 int tickets 100 handle hmutex int ...