死鎖問題和解決方法 lock 函式

2021-10-09 03:18:12 字數 860 閱讀 5619

//死鎖,兩個鎖(兩個互斥量),被兩個執行緒按亂序使用導致死鎖,跟解鎖順序無關

//死鎖的解決辦法一:保證兩個互斥量上鎖的順序一致就不會死鎖。

//解決方法二:std::lock()函式,一次鎖住兩個或兩個以上的互斥量(至少兩個,多了不限,1個不行);

//要麼兩個互斥量都鎖住,要麼兩個互斥量都沒鎖住。如果只鎖了乙個,另外乙個沒鎖成功,則它立即把已經鎖住的互斥量解鎖。

#include

#include

#include

//適合亂序取出資料

#include

//適合有序取出資料

#include

//互斥量

using

namespace std;

classa}

void

outmsgrecvqueue()

else

cout << endl;}}

private

: list<

int>msgrecvqueue;

mutex my_mutex;

//我的互斥量

mutex my_mutex2;

//測試死鎖

protected

:bool

getthenumber

(int

&command)

//取command位址,所以修改了command的資料

my_mutex.

unlock()

; my_mutex2.

unlock()

;return

false;}

};intmain()

前端問題和解決方法

centering text in column th.dt center,td.dt center change table header color using bootstrap thead th tbody td change select default color selection m...

死鎖解決方法

死鎖是程序併發執行過程中可能出現的現象,哲學家就餐問題是描述死鎖的經典例子。為了防止死鎖,可以採用資源預分配法或者資源按序分配法。資源預分配法是指程序在執行前一次性地向系統申請它所需要的全部資源,如果系統當前不能夠滿足程序的全部資源請求,則不分配資源,此程序暫不投入執行,如果系統當前能夠滿足程序的全...

死鎖及解決方法

死鎖的概念 quad 死鎖 指的是 quad 多個執行緒各自占有一些共享資源,並且互相等待其他執行緒占有的資源才能進行,而導致兩個或者多個執行緒都在等待對方釋放資源,都停止執行的情形。quad 因此,某乙個同步塊需要同時擁有 兩個以上物件的鎖 時,就可能會發生 死鎖 的問題。下面案例中,化妝執行緒 ...