C++11如何避免死鎖

1、原子操作

2、按照特定的順序加鎖/解鎖

3、使用C++11的新特性:

struct BankAccount {
	BankAccount(int b) : Balance(b) {}
	int Balance;
	mutex Mutex;
};
void transferMoney(BankAccount&a, BankAccount& b, int money)
{
	lock(a.Mutex, b.Mutex);  //將鎖需要鎖住的臨界體全部鎖住
	//按照某種特定的順序防止死鎖
	lock_guard<mutex> lockA(a.Mutex, adopt_lock);  //adopt_lock 告訴編譯器在析構的時候解鎖
	lock_guard<mutex> lockB(b.Mutex, adopt_lock);
 
	if (a.Balance <= money)
		return;
	a.Balance -= money;
	b.Balance += money;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章