调用boost :: thread Interrupt()时,使用boost :: barrier wait()等待的线程不会被中断。例如 http://www.justsoftwaresolutions.co.uk/threading/thread-interruption-in-boost-thread-library.html
这有充分的理由吗?
当然我们可以手动放置一个boost :: this_thread :: interruption_point()来处理它。
答案 0 :(得分:1)
boost::mutex::lock()
或boost::barrier::wait()
将继续等待。
另一件事是,如果你允许barrier::wait()
在没有获取锁的情况下提前返回,则必须在抛出异常之前从等待屏障的线程池中取消注册当前线程,这将使得实施更复杂。它还允许锁定/等待方法返回而不获取锁定,这也会使您的代码更复杂。
一般来说,我认为这只是一种设计选择。
如果你看一下中断点的方法,你会发现他们通常打算睡一段时间(boost::this_thread::sleep()
,boost::condition_variable_any::wait()
)及其对手sleep
和pthread_cond_wait
也被信号终止。虽然这里的例外是boost::thread::join()
,这是一个中断点,而pthread_join
在处理信号后仍在等待。