天天看點

避免死鎖的方法

死鎖不僅僅是在使用鎖的時候發生(盡管這是最常見的),建立兩個線程,在每個線程中調用對方的join函數,這時候也會造成死鎖。兩個線程都在等待對方先結束。避免死鎖有一個最簡單的原則:如果這個線程可能等待你,那麼你就不要等待這個線程。

1、避免給一個鎖嵌套上鎖

在持有一個鎖的時候,不要再給這個鎖上鎖。如果使用多個鎖,使用std::lock。

2、在持有鎖時,不要調用别人提供的函數

因為你不清楚别人的代碼怎麼實作的,不知道它是不是在使用鎖。

3、給多個鎖上鎖時,固定順序。

如果在給多個所上鎖,并且無法使用std::lock,最好的做法就是在每一個線程中,都按照同樣的順序。

4、分層次來使用鎖

把程式分成幾個層次。區分每個層次中使用的鎖,當一個線程已經持有更低層次的鎖時,不允許使用高層次的鎖。可以在程式運作時給不同的鎖加上層次号,記錄每個線程持有的鎖。

未來星開發團隊--狒狒

QQ:9715234

繼續閱讀