【发布时间】:2011-08-28 20:12:47
【问题描述】:
这个问题来自Breaking a condition variable deadlock。许多线程可能正在等待条件变量,我只需要向特定线程发出信号,比如线程 1 并杀死它,因为它是死锁场景的参与者。有没有办法我可以在很多中只发出一个特定的线程。
不胜感激
谢谢
编辑;尊重 Nemo 的 cmets。我明白这是个坏主意。但是,有没有办法做到这一点
【问题讨论】:
-
概率非常接近 1,您的设计存在缺陷。您几乎肯定不想要“检测死锁并杀死参与其中的线程之一”。你想修复你的基本设计,这样死锁就不会发生......
-
@Nemo... 我同意你的看法。但是,在我们的特殊情况下,我们选择检测和解决死锁而不是避免死锁,因为发生死锁的可能性非常小。
-
对不起@Juggler,但我不认同这种哲学。这是软件。没有所谓的“极其罕见”。只有“从不”和“错误”。或者正如尤达所说,没有尝试。
-
@Nemo...好吧。 :-)。谢谢
-
@Nemo,好吧,如果你正在编写一个数据库事务系统,其中事务的内容由更高级别的代码提供,中止事务并重试可能是合理的死锁(Berkeley DB 会这样做,许多 SQL 实现也是如此)。所以我不会说这绝不是一个合理的方法。这只是很少一种合理的方法——尤其是当你取消有问题的线程时必须有一个回滚计划
标签: c linux condition-variable