【发布时间】:2012-07-05 20:17:03
【问题描述】:
当调用 boost::thread Interrupt() 时,使用 boost::barrier wait() 等待的线程不会被中断。例如 http://www.justsoftwaresolutions.co.uk/threading/thread-interruption-in-boost-thread-library.html
这样做有充分的理由吗?
当然我们可以手动放置一个 boost::this_thread::interruption_point() 来解决它。
【问题讨论】:
-
你在哪里找到第一句话?它不在您链接的页面中。
-
@Tudor:链接列出了中断点,但不包括
boost::barrier::wait()(除非它的实现是在条件变量上调用wait()...) -
@Tudor 我没有,我观察到了这种行为,并看到这个页面按预期确认了它,因为 boost:barrier 没有列出。手动添加 interrupt_point 解决了这个问题。但我只是想知道......
-
可能是因为barrier
wait是一个集体操作,需要所有线程互相等待。如果其中一个被打断,那么所有其他的都可能死锁。 -
这不是真的。 barrier::wait 是根据 condition::wait 实现的,那是一个中断点。
标签: c++ multithreading boost synchronization interrupt-handling