不应该阻止操作总是可以中断吗?

时间:2015-10-16 15:52:41

标签: c++ ipc deadlock thread-synchronization boost-interprocess

在我看来,所有的块操作都应该提供一些机制来中断等待并让线程干净地返回,就像Windows API中的alertable wait操作一样。但是,除了Windows API之外,很难看到这样的功能。我不知道为什么。

想象一下如果块操作不提供这样的机制会发生什么。 Boost.Interprocess中的message_queue类就是这样一个例子。其send()receive()方法正在阻止。这意味着具有阻塞线程的进程将无法完全控制自身。除非有一些外部因素发挥作用,否则这样的过程甚至无法选择彻底退出,因为实际上没有办法强制阻塞的线程退出其等待状态。除此之外,没有这样的功能,没有干净的方法来解决已经发生并已被检测到的死锁。尽管有这些,我已经看到很多阻塞操作设计没有这样的功能。为什么是这样?我刚搞错了吗?

另一个例子是C ++ 11中的std::mutex::lock()。但由于它是整个流程的,并且外部因素仍然在流程的控制范围内,因此问题并不像机器范围的阻塞机制那么严重。但是提供一个退出方法不是更好吗?我知道std::condition_variable。我只是认为每个阻塞操作都应该是可以中断的,即使代价是性能下降。

0 个答案:

没有答案