c++ - 在线程 A 中创建 std::thread 对象,加入线程 B

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

是否允许调用join()std::thread如果对象在线程之间正确同步,那么在不同线程中创建的对象?

例如:

void cleanup(std::thread t)
{
    t.join();
}

int main()
{
    std::thread t{[] { /* something */ }};

    std::thread c{cleanup, std::move(t)};
    c.join();
}

最佳答案

是的。 join()除了线程本身之外,任何线程都可以在有效的线程对象上调用。

Error Conditions

resource_deadlock_would_occur if this->get_id() == std::this_thread::get_id().

no_such_process if the thread is not valid

invalid_argument if joinable() is false

关于c++ - 在线程 A 中创建 std::thread 对象,加入线程 B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59479272/

相关文章:

c++ - 优雅地(迭代)分块解析数据?

c++ - 指向由库返回的包装数组的智能指针

java - 递归(返回语句)

c++ - std::enable_if 和 std::enable_if_t 有什么区别?

java - 如何创建同步数组列表

multithreading - 同时执行多个线程循环的并发编程?

linux - socket编程中的线程问题

c++ - uintX_t 和 intX_t 类型的打印保证

c++ - 如何将类似 iostream 的接口(interface)写入日志库?

c++ - 为什么 "default"是复制/移动构造函数或析构函数?