![](/img/trans.png)
[英]Understanding std::swap(). What is the purpose of tr1::_Remove_reference?
[英]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.