线程从单独的线程运行和连接

时间:2016-12-03 13:32:29

标签: c++ c++11 thread-safety

我有一个在线程中创建的shared_ptr对象。在这个对象中有一个启动函数,它创建另一个线程。并且有一个停止函数,用于保存和连接这些内部线程。从任何单独的线程停止(调用连接)是否安全?

TestThreadClass.cpp

namespace
{
    std::thread T1;
    std::atomic_bool workerFlag(true);
    void workerFunc()
    {
        while (workerFlag.load())
        {
            std::this_thread::sleep_for(std::chrono::milliseconds(1));
        }
    }
}  //namespace

TestThreadClass::~TestThreadClass()
{
    stop();
}

void TestThreadClass::start()
{
    T1 = std::thread{workerFunc};
}
void TestThreadClass::stop()
{
    workerFlag.store(false);
    if (T1.joinable())
    {
        T1.join();
    }
}

的main.cpp

namespace
{
    std::shared_ptr<TestThreadClass> mainObj;
    void workerFunc()
    {
        auto newObject = std::make_shared<TestThreadClass>();
        newObject->start();
        std::atomic_store(&mainObj, newObject);
    }

    void workerFunc2()
    {
        mainObj->stop();
    }
}  // namespace

int main(int argc, char** argv)
{
    std::thread t1{workerFunc};
    t1.join();
    t1 = std::thread{workerFunc2};
    t1.join();
    return 0;
}

0 个答案:

没有答案