gpt4 book ai didi

c++ - 打印 std::this_thread::get_id() 给出 "thread::id of a non-executing thread"?

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

这曾经工作得很好(然后外星人一定黑了我的电脑):

#include <thread>
#include <iostream>

int main()
{
std::cout << std::this_thread::get_id() << std::endl;

return 0;
}

现在它打印thread::id of a non-executing thread

ideone.com 打印了一些 ID,但有趣的是是什么导致了我平台上的这种行为。

$ uname -a
Linux xxx 3.13.0-77-generic #121-Ubuntu SMP Wed Jan 20 10:50:42 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

有什么想法吗?


编辑:嗯..当我添加

std::cout << pthread_self() << std::endl;

两行 打印相同的 ID,但是当我删除它时,结果仍然相同 - “非执行线程”。

最佳答案

这是 glibc 功能的副作用,已在 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57060 中修复:

// For the GNU C library pthread_self() is usable without linking to
// libpthread.so but returns 0, so we cannot use it in single-threaded
// programs, because this_thread::get_id() != thread::id{} must be true.

如果您显式链接到 pthread(-pthread-lpthread),那么您的程序将按预期运行。

奇怪的是,在我的系统上,添加对 pthread_self 的调用(在调用 std::this_thread::get_id() 之前或之后不会改变行为:

0
thread::id of a non-executing thread

这可能是 Ubuntu 特有的行为,如果调用 pthread_self 会自动链接 pthread,但这看起来有点奇怪。请注意,std::this_thread::get_id() 通过弱引用(本身通过 __gthread_self)调用 pthread_self

关于c++ - 打印 std::this_thread::get_id() 给出 "thread::id of a non-executing thread"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36357909/

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