以更安全的方式将资源移动到新线程

时间:2014-09-06 16:10:52

标签: c++ multithreading

考虑这个有效的代码,我打算将资源移动到新线程:

void Func1(std::ofstream* f) {
    std::unique_ptr<std::ofstream> file(f);

    *file << "This is working" << std::endl;
}

int Func2() {
    std::unique_ptr<std::ofstream> file(new std::ofstream("output.txt"));

    std::thread t1(&Func1, file.release());
    t1.detach();

    return 0;
}

int main() {

    Func2();

    std::cin.get();

    return 0;
}

由于我找不到跨越线程边界移动资源的方法,所以我必须传递一个普通的指针。

这是要走的路吗?全局变量会更好地处理资源吗?

是的,我可以传递文件名并在Func1中打开它,但问题对于任何不应复制的类都是通用的。

1 个答案:

答案 0 :(得分:3)

void Func1(std::unique_ptr<std::ofstream> file) {

    *file << "This is working" << std::endl;
}

int Func2() {
    std::unique_ptr<std::ofstream> file(new std::ofstream("output.txt"));

    std::thread t1(&Func1, std::move(file));
    t1.detach();

    return 0;
}

boost::thread and std::unique_ptr启发