繁体   English   中英

std::thread::swap 的目的是什么?

[英]What is the purpose of std::thread::swap?

据我了解, std::thread::swap 交换两个线程的线程 ID。 它不会以任何方式更改线程本地存储或影响任一线程的执行。 其背后的目的是什么? 如何/在哪里/为什么使用它?

不要将其视为“交换两个线程的线程 ID”,而是将其视为交换两个线程变量

std::thread a(...); // starts thread 1
std::thread b(...); // starts thread 2
a.swap(b); // or std::swap(a, b);
// now variable a points to thread 2
// and variable b points to thread 1

大多数变量都可以与std::swap ,即使是那些无法复制的变量。 我不确定他们为什么为 std::thread 创建了一个swap成员函数。

这很有用,例如,您可以对thread s 的vector进行sort 排序算法将使用swap来重新排列向量中的线程。 请记住,在 C++ 中不能移动对象,只能移动它们的内容。 swap和 move 语义,允许您将大多数对象的内容移动到不同的对象中。 对于thread ,它将“指针”移动到线程。

std::thread是内部引用类型 - 类似于std::vector方式。 在内部, std::vector也只是指存储在动态内存中的内存缓冲区。

您所描述的是交换如何与此类类型一起工作。 交换向量只是交换指向缓冲区的指针(以及一些簿记信息) - 存储的对象都不会受到操作的影响。 这些指针是资源的“句柄”。 类似地,交换线程会交换内部线程 id - 它是线程资源的句柄 - 而不会影响引用线程的状态。

至于交换的目的……这只是一件有用的事情。 它最显着地用于排序和其他重新排序算法。 我不知道重新排序线程对象的特定原因,但我也不知道为什么不应该这样做的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM