繁体   English   中英

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

[英]std::thread class vs std::this_thread namespace in c++?

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

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

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

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 

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

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

std::thread用于创建,监视和操作新线程
std::this_thread用于alreay创建的线程中

您可以在std::thread内的公共类中提供this_thread作为静态方法,但这是一个设计决策,我敢说这种设计更像Java,其中将数据封装为命名空间更多C ++ - 哲学调整了一种设计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM