我正在分析大量的多線程代碼,我看到了這麼多的鎖。一些方法將有兩個鎖在這樣的一行:同步代碼味道?
ClassA::foo()
{
lockA.lock();
lockB.lock();
...//do some stuff
lockB.unlock();
lockA.unlock();
}
我的問題是很一般(我不能提供實際的代碼)。這是代碼味道嗎?這通常是不好的做法?我無法證明代碼可以被簡化,但它看起來好像它是否被正確編碼,不需要鎖定兩件事。鎖應該管理一組需要同步的資源,對吧?如果有兩個鎖與資源管理重疊,那麼是否會出現一些死鎖問題?
如果您有任何見解,請讓我知道。
感謝, JBU
如果另一個線程的方法確實是這樣ClassB的::巴(){lockB.lock();洛卡。鎖();做東西; lockA.unlock(); lockB.unlock();}(注意鎖定順序的逆轉)那麼存在死鎖的條件是不是?也許要添加到您的答案,鎖定需要按照一致的順序完成? – jbu 2011-01-25 16:24:50
是的,鎖定需要按照一致的順序進行。 – 2011-01-25 16:27:55