移动std :: thread并维护状态

时间:2015-05-06 22:30:07

标签: c++ stdthread move-constructor

我有一个维护工作线程的类。当我传递它们并从数组中添加/删除时,它需要是可构造的,例如:

    for (...) {
        Foo foo;
        foos.push_back(std::move(foo));
    }

类设置如下所示:

Foo::Foo() : worker(), working(true) {
    worker = std::thread(&Foo::work, this);
}

Foo::Foo(Foo &&foo) {
    working = true;
    worker = std::move(foo.worker);
}

Foo::~Foo() {
    if (worker.joinable()) {
        working = false;
        worker.join();
    }
}

void Foo::work() {
    while(working) {
        std::cout << "working..." << std::endl;
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
}

问题是移动Foo后,其工作线程退出。我发现它是因为working现在看到workerfalse

如何让worker线程查看新(移动到)父Foo对象的实例变量?这可能吗?我的移动构造函数完全错了吗?

0 个答案:

没有答案