QT下執行緒鎖死的問題

2022-06-17 04:12:11 字數 443 閱讀 2011

qt下多執行緒乙個函式:

time_manage_state federate::gettimestate()

執行時發現其鎖死了。

檢查後發現原因:多重同步鎖問題。即在此函式外又加了一層鎖,導致兩次鎖定衝突。

_mutex.lock();

while(gettimestate() != time_advance_grant)

cout << "***!!! modellink: timeadvance wait here when time_advacne_request state......" << endl;

_waitor.wait(&_mutex);

}_mutex.unlock();

可以看到,在gettimestate()函式外使用同樣的鎖,這樣出現了死鎖的問題。

21 執行緒的活性故障 鎖死

等待執行緒由於喚醒其所需的條件永遠無法成立,或者其他執行緒無法喚醒這個執行緒而一直處於非執行狀態 執行緒並未終止 導致其任務 一直無法進展,那麼我們就稱這個執行緒被鎖死。訊號丟失鎖死是由於沒有相應的通知執行緒來喚醒 等 待執行緒而使等待執行緒一直處於等待狀態的一種活性故障 訊號丟失鎖死的乙個典型例子...

linux下執行緒同步之互斥鎖

互斥鎖是多執行緒同步的一種方式,當多個執行緒訪問同乙個變數時,最簡單的方法就是使用乙個互斥鎖 mutex 保護這個共享變數,防止出現資源搶占的問題。下面是未加互斥鎖時 include includepthread mutex t mutex pthread mutex initializer 靜態初...

Linux下執行緒同步物件 2 讀寫鎖

上文介紹了linux下執行緒同步物件 互斥量,本文介紹另外linux下同步物件 讀寫鎖。如果多個執行緒同時讀資源,則不會發生競爭關係,也不會出現資源的不一致性,所以讀資源的時候不需要同步物件保護。但是如果寫某個資源的時候,必須要進行同步保護,否則將會出現不一致性。在上文的互斥量中,不管讀寫都加鎖,這...