C++ 不应该';t阻塞操作是否总是可中断的?
在我看来,所有的块操作都应该提供一些机制来中断等待并让线程干净地返回,就像WindowsAPI中的操作一样。然而,除了windowsapi之外,这种特性几乎不存在。我不知道为什么 想象一下,如果块操作不提供这样的机制,会发生什么。Boost.Interprocess中的类就是这样一个例子。它的C++ 不应该';t阻塞操作是否总是可中断的?,c++,ipc,deadlock,thread-synchronization,boost-interprocess,C++,Ipc,Deadlock,Thread Synchronization,Boost Interprocess,在我看来,所有的块操作都应该提供一些机制来中断等待并让线程干净地返回,就像WindowsAPI中的操作一样。然而,除了windowsapi之外,这种特性几乎不存在。我不知道为什么 想象一下,如果块操作不提供这样的机制,会发生什么。Boost.Interprocess中的类就是这样一个例子。它的send()和receive()方法被阻塞。这意味着带有阻塞线程的进程将无法完全控制自身。除非某些外部因素起作用,否则这样的进程甚至不能选择干净地退出,因为实际上没有办法迫使被阻塞的线程退出等待状态。除此之
send()
和receive()
方法被阻塞。这意味着带有阻塞线程的进程将无法完全控制自身。除非某些外部因素起作用,否则这样的进程甚至不能选择干净地退出,因为实际上没有办法迫使被阻塞的线程退出等待状态。除此之外,如果没有这样的特性,就没有干净的方法来解决已经发生并被检测到的死锁。尽管如此,我还是看到了很多没有这种特性的阻塞操作。为什么会这样?我是不是出了什么问题
另一个例子是C++11。但是,由于它是进程范围的,并且外部因素仍在进程的控制范围内,所以问题并不像机器范围的阻塞机制那样严重。但是仅仅提供一个撤销方法不是更好吗?我知道std::condition\u variable。我只是认为每一个阻塞操作都应该是可中断的,即使是以性能下降为代价。如果您认为需要“强制阻塞线程退出等待状态”,那么使用阻塞等待可能是一个编码错误,那么这个问题可能更合适。另一方面,我已经实现了调试命令,并向阻塞的任务发送了一个no-op命令(作为恢复测试的捷径)。不是正常代码操作的一部分。如果出现死锁,则说明已经存在实现错误/逻辑错误。IMHO-最好花时间找出原因。@NathanOliver在引用其他站点时,指出Python中的阻塞操作是可中断的通常是有帮助的。例如mutex.acquire(),我认为如果您认为需要“强制阻塞线程退出等待状态”,那么使用阻塞等待可能是一个编码错误,那么这个问题可能更合适。另一方面,我已经实现了调试命令,并向阻塞的任务发送了一个no-op命令(作为恢复测试的捷径)。不是正常代码操作的一部分。如果出现死锁,则说明已经存在实现错误/逻辑错误。IMHO-最好花时间找出原因。@NathanOliver在引用其他站点时,指出Python中的阻塞操作是可中断的通常是有帮助的。例如mutex.acquire()