在c ++中std :: thread class vs std :: this_thread命名空间?

roo*_*ler 6 c++ multithreading

当我们已经有一个std::thread类时,为什么我们需要std::this_thread命名空间?

它们之间有什么基本区别?

什么时候我应该使用std::thread类和std::this_thread命名空间?

Tom*_*sen 5

this_thread访问当前线程的命名空间群组的功能,所以当我们需要做的当前线程上的东西,我们并不需要访问thread该线程的对象.

线程类不提供让步和休眠的访问,这些函数只对当前线程有意义,因此可以在this_thread命名空间中找到.

如果我们希望获得有关不同线程的信息,我们需要该线程的thread实例,如果我们需要访问当前线程,我们总是可以通过this_thread命名空间中的函数来实现.

this_thread在扩展草案中也解释了使用命名空间的想法:

this_thread命名空间

请注意,当您请求当前线程的id与子线程的id时,使用this_thread命名空间来消除歧义.此操作的get_id名称保持不变,以减少接口的概念占用空间.此设计也适用于cancellation_requested函数:

std::thread my_child_thread(f);
typedef std::thread::id ID:

ID my_id std::this_thread::get_id();  // The current thread's id
ID your_id my_child_thread.get_id();  // The child   thread's id

bool have_i_been_canceled = std::this_thread::cancellation_requested();  // Current thread's cancellation status
bool have_you_been_canceled = my_child_thread.cancellation_requested();  // Child   thread's cancellation status
Run Code Online (Sandbox Code Playgroud)

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

this_thread命名空间添加函数作为thread类的静态成员可能已经完成,但是然后必须将get_id函数调用为其他函数,以使其明显不同于get_id线程类的现有函数.换句话说,我的猜测是C++团队决定将函数添加到一个单独的命名空间,以便更清楚地表明这些函数正在读取或操作当前线程,如果将它们简单地添加为静态则不会同样清楚线程类的成员.