gpt4 book ai didi

c++ - 为什么 C++ 线程是可移动的而不是可复制的?

转载 作者:搜寻专家 更新时间:2023-10-31 00:58:40 26 4
gpt4 key购买 nike

正如问题标题所说,为什么 C++ 线程(std::threadpthread)是可移动的而不是可复制的?如果我们让它可复制,会有什么后果?

最佳答案

关于复制,请考虑以下代码段:

void foo();

std::thread first (foo);
std::thread second = first; // (*)

当标记为 (*) 的行发生时,可能已经执行了一些 foo。那么预期的行为是什么?从头开始执行 foo?暂停线程,复制寄存器和状态,然后从那里重新运行?

特别是考虑到 function objects现在是标准的一部分,通过重用函数对象,很容易启动另一个线程来执行与某些早期线程完全相同的操作。

因此,开始时没有太多动力。


不过,关于移动,请考虑以下几点:

std::vector<std::thread> threads;

如果没有移动语义,就会有问题:当 vector 需要在内部调整大小时,它如何将其元素移动到另一个缓冲区?查看更多信息 here .

关于c++ - 为什么 C++ 线程是可移动的而不是可复制的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35037035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com