gpt4 book ai didi

c++ - std::thread 类与 C++ 中的 std::this_thread 命名空间?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:50 25 4
gpt4 key购买 nike

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

它们之间的基本区别是什么?

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

最佳答案

this_thread 命名空间将访问当前线程的函数分组,所以当我们需要在当前线程上做一些事情时,我们不需要访问 thread 对象线程。

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

如果我们想要关于不同线程的信息,我们需要那个线程的thread实例,如果我们需要访问当前线程,我们总是可以通过中的函数来实现this_thread 命名空间。

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

this_thread Namespace

Note the use of the this_thread namespace to disambiguate when you are requesting the id for the current thread, vs the id of a child thread. The get_id name for this action remains the same in the interest of reducing the conceptual footprint of the interface. This design also applies to the cancellation_requested function:

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++ 团队决定将这些函数添加到一个单独的命名空间,以便更清楚地表明这些函数正在读取或操作当前线程,如果将它们简单地添加为静态,则不会同样清楚线程类的成员。

关于c++ - std::thread 类与 C++ 中的 std::this_thread 命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33853667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com