C++ 中断自己的线程安全吗?
我有一个类正在创建一个线程并存储它。在做一些事情时,这个线程可能会注意到一些错误,通知类并自行中断C++ 中断自己的线程安全吗?,c++,multithreading,boost,C++,Multithreading,Boost,我有一个类正在创建一个线程并存储它。在做一些事情时,这个线程可能会注意到一些错误,通知类并自行中断 class foo { public: enum mode { run=0, booboo, stop }; foo() { th_ = boost::thread(boost::bind(&foo::bar, this)); mode_ = run; } ~foo(
class foo {
public:
enum mode {
run=0,
booboo,
stop
};
foo() {
th_ = boost::thread(boost::bind(&foo::bar, this));
mode_ = run;
}
~foo() {
stop();
}
void stop() {
mode_ = stop;
th_.join();
}
void bar {
for(;;) {
if(mode_ == stop)
return;
if(error) {
mode_ = booboo;
th_.interrupt();
// the sleep is the interruption point
boost::this_thread::sleep_for(boost::chrono::nanoseconds(0));
}
// do some stuff
}
}
private:
boost::thread th_;
mode mode_;
};
据报道,没有迹象表明这是行不通的。如果我理解正确,interrupt
将在下一个中断点标记线程以中断它,在我的例子中,这是对sleep的调用
在我的机器和操作系统上,它正在工作,所以我的问题是,这样做安全吗?如果文档没有明确说明它可能无法工作,那么我看不出有任何理由这样想。有什么特别的问题让你觉得它可能吗?@Purrfection事实上我只是想确定一下。我也看不出它为什么不起作用,但我看不出它有什么真正的用处。如果中断线程,它将在遇到的第一个中断点抛出一个
boost::thread\u interrupted
异常,除非中断被禁用。也就是说,您可以直接抛出异常。