-5
假設我得到兩個銀行賬戶A和B,我需要自動轉賬。 的設置如下: `如何編寫原子賬戶轉賬功能
struct account{
int64 amount;
pthread_mutex_lock m;
}
`
這裏是我的方法: `
bool Transfer(int from_account, int to_account, int64 amount)
{
pthread_lock(&account[from_account].m);
bool ret = false;
if(accounts[from_account].balance>=amount)
{
accounts[from_account].balance-=amount;
ret = true;
}
pthread_unlock(&account[from_account].m);
pthread_lock(&account[to_account].m);
accounts[to_account].balance+=amount;
pthread_unlock(&account[to_account].m);
return ret;
}
`
功能轉移資金從from_account到to_account,返回一個布爾值,只有當帳戶剩餘資金> = ammount時才轉移。 這是一個好的方法嗎?我想這不會導致死鎖問題,但它不會使整個功能非原子?那麼可能有競爭條件?請幫助我,非常感謝。
此功能不是原子的。還有種族條件。並且存在死鎖情況。它並不是特例安全。所以不行。這不是一個好方法。 –
請提出具體問題。另外,什麼平臺? –
_ @ user3799934_您是否考慮過使用[C++標準線程和同步支持](http://en.cppreference.com/w/cpp/thread),而不是在本地使用'pthread'掙扎? –