gpt4 book ai didi

c++ - std::this_thread::get_id() 在 VS2013 中可靠吗?

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:42 27 4
gpt4 key购买 nike

标题说明了一切:)

#include <thread>
#include <cstdio>

int main()
{
std::thread threads[2];

for (int i = 0; i < 2; ++i)
{
threads[i] = std::thread([&]()
{
printf("thread id = %x\n", std::this_thread::get_id());
printf("thread id = %x\n", std::this_thread::get_id());
});
}

for (auto& it : threads)
{
it.join();
}

return 0;
}

当使用 GCC 和 Clang 编译和运行它时,我得到了(我的)预期结果,以某种随机顺序打印了 4 条具有 2 个不同值的消息。使用 VS2013 时,我有 4 条消息(如预期的那样),但有 4 个不同的值!

我在这里或编译器/MS 线程库做错了吗?

编辑:正如 Tony D 所指出的,问题似乎出在我认为 thread::id 是一个 int 的地方。下一个代码按预期工作:

#include <thread>
#include <cassert>

int main()
{
std::thread threads[2];

for (int i = 0; i < 2; ++i)
{
threads[i] = std::thread([&]()
{
std::thread::id id1 = std::this_thread::get_id();
std::thread::id id2 = std::this_thread::get_id();
assert(id1 == id2);
});
}

for (auto& it : threads)
{
it.join();
}

return 0;
}

最佳答案

您正在强制执行 std::thread::id转换为 int。使用 std::cout 代替 printf 写入标准输出。并使用某种同步对象:

std::mutex display_mutex;

int main()
{
std::thread threads[2];

for (int i = 0; i < 2; ++i)
{
threads[i] = std::thread([&]()
{
std::unique_lock<std::mutex> display_lock(display_mutex);
std::cout << "thread id = " << std::this_thread::get_id() << "\n";
std::cout << "thread id = " << std::this_thread::get_id() << "\n";
});
}

for (auto& it : threads)
{
it.join();
}

return 0;
}

但要回答你的问题:是的,std::this_thread::get_id() 在 VS2013 中非常可靠。

关于c++ - std::this_thread::get_id() 在 VS2013 中可靠吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22221248/

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