簡體   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