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;
}