Std:: thread class vs std:: this_thread пространство имен в С++?

Если у нас уже есть класс std::thread, то зачем нам нужно пространство имен std::this_thread?

В чем основные отличия между ними?

Когда я должен использовать класс std::thread и когда std::this_thread пространство имен?

2 ответа

Группы пространств имен this_thread, которые обращаются к текущему потоку, поэтому, когда нам нужно что-то делать в текущем потоке, нам не нужен доступ к объекту thread потока.

Класс потока не предоставляет доступ для уступа и сна, эти функции имеют смысл только для текущего потока и поэтому могут быть найдены в пространстве имен this_thread.

Если нам нужна информация о другом потоке, нам нужен экземпляр thread этого потока, если нам нужно получить доступ к текущему потоку, мы всегда можем это сделать с помощью функций в пространстве имен this_thread.

Мысли об использовании пространства имен this_thread также были объяснены в черновике расширения:

это пространство имен this_thread

Обратите внимание на использование пространства имен this_thread для устранения неоднозначности, когда вы запрашиваете идентификатор для текущего потока, а также идентификатор дочернего потока. Имя get_id для этого действия остается тем же самым в интересах уменьшения концептуального следа интерфейса. Эта конструкция также применяется к функции cancelation_requested:

std::thread my_child_thread(f);
typedef std::thread::id ID:
ID my_id std::this_thread::get_id(); // The current thread id
ID your_id my_child_thread.get_id(); // The child thread id
bool have_i_been_canceled = std::this_thread::cancellation_requested(); // Current thread cancellation status
bool have_you_been_canceled = my_child_thread.cancellation_requested(); // Child thread cancellation status

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2320.html

Добавление функций из пространства имен this_thread в качестве статических членов класса thread могло быть выполнено, но тогда функция get_id должна была бы называться чем-то еще, чтобы она четко отличалась от уже существующей get_id функции класса потока. Другими словами, я предполагаю, что команда С++ решила добавить функции в отдельное пространство имен, чтобы было более ясно, что эти функции читают или обрабатывают текущий поток, что не было бы одинаково ясно, если бы они просто были добавлены как статические членов класса потоков.


std::thread используется для создания, мониторинга и управления новыми потоками, std::this_thread используется внутри alreay созданных потоков.

Вы могли бы предоставить this_thread как статические методы внутри открытого класса внутри std::thread, но это дизайнерское решение, я бы осмелился сказать, что этот вид дизайна больше похож на Java, где инкапсуляция данных как namespace - больше С++ - пилософия настроенная конструкция.

licensed under cc by-sa 3.0 with attribution.