我正在阅读 abut std::async with std::launch::async 并使用该策略阅读,可调用将在新线程中调用。
所以为了测试,我做了如下:
struct Wrapper
{
void consume()
{
std::cout << "consume " << std::this_thread::get_id() << std::endl;
std::for_each(arr.begin(), arr.end(), [](int val) {std::cout << val; });
}
bool produce()
{
std::cout << "produce " << std::this_thread::get_id() << std::endl;
arr = { 1,0,3 };
return true;
}
};
int main()
{
std::cout << "main " << std::this_thread::get_id() << std::endl;
Wrapper wrap;
std::future<bool> fut = std::async(std::launch::async, &Wrapper::produce, &wrap);
if (fut.get())
std::async(std::launch::async, &Wrapper::consume, &wrap);
}
因此,基于此,我将期望 3 个线程:
- 线程1:主线程
- 线程 2:std::async 的第一次调用(执行生产 fct)
- 线程3:第二次调用std::async(执行consume fct)
当我运行程序时,我得到:
为什么 std::async 的两个调用具有相同的线程 ID?
谢谢你。