Не думайте об этом как о "обмене идентификаторами потоков двух потоков", думайте об этом как об обмене двумя потоками переменных :
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
, даже те, которые не могут быть скопированы. Я не уверен, почему они также создали swap
функцию-член для std :: thread.
Это полезно, потому что вы можете, например, sort
a vector
thread
с. Алгоритм сортировки будет использовать swap
для перестановки потоков в векторе. Помните, что объекты не могут быть перемещены в C ++, только их содержимое. swap
и перемещение семантики позволяют перемещать содержимое большинства объектов в разные объекты. Для thread
он перемещает «указатель» на поток.