避免死锁的方法

 

死锁不单单是在使用锁的时候发生(尽管这是最多见的),建立两个线程,在每一个线程中调用对方的join函数,这时候也会形成死锁。两个线程都在等待对方先结束。避免死锁有一个最简单的原则:若是这个线程可能等待你,那么你就不要等待这个线程。
一、避免给一个锁嵌套上锁
在持有一个锁的时候,不要再给这个锁上锁。若是使用多个锁,使用std::lock。
二、在持有锁时,不要调用别人提供的函数
由于你不清楚别人的代码怎么实现的,不知道它是否是在使用锁。
三、给多个锁上锁时,固定顺序。
若是在给多个所上锁,而且没法使用std::lock,最好的作法就是在每个线程中,都按照一样的顺序。
四、分层次来使用锁
把程序分红几个层次。区分每一个层次中使用的锁,当一个线程已经持有更低层次的锁时,不容许使用高层次的锁。能够在程序运行时给不一样的锁加上层次号,记录每一个线程持有的锁。
相关文章
相关标签/搜索