Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 中断自己的线程安全吗?_C++_Multithreading_Boost - Fatal编程技术网

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
异常,除非中断被禁用。也就是说,您可以直接抛出异常。