【问题标题】:Can someone PLEASE show me a simple deadlock with two threads example in C++ [duplicate]有人可以向我展示一个简单的死锁,C++ 中有两个线程示例 [重复]
【发布时间】:2013-06-22 15:42:23
【问题描述】:

谁能给我看一个简单的死锁,在C++中有两个线程示例

【问题讨论】:

标签: multithreading visual-c++ pthreads deadlock


【解决方案1】:

其中一个最简单的 - 它是伪代码,但您应该能够将其翻译成几乎任何语言:

线程 1:

 acquire_lock(lockA);
   ... do some work ...
 acquire_lock(lockB);

线程 2:

acquire_lock(lockB);
  ... do some other work ...
acquire_lock(lockA);

如果线程 1 正在执行但尚未持有 lockB,而线程 2 获取了 lockB,则两个线程都不能在第二次获取锁之后继续。

【讨论】:

  • 有没有办法只用一个锁+IO操作就发生死锁?
  • 据我所知并非如此。标准死锁场景几乎需要两个锁。也就是说,如果一个线程阻塞 IO 并在 IO 的长度内持有锁,那么另一个线程在这段时间内将无法获得锁,因此症状将非常接近于“真正的”死锁。不同之处在于其中一个最终会自行解决,而另一个则不会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
  • 2021-06-25
  • 1970-01-01
相关资源
最近更新 更多