gpt4 book ai didi

c++ - 为什么 std::thread 在其构造函数中等待?

转载 作者:行者123 更新时间:2023-11-27 23:56:02 25 4
gpt4 key购买 nike

由于构造函数中的互斥等待,Microsoft Visual C++ 2015 中 STL 的当前实现似乎不允许任何无锁环境启动线程。

void _Launch(_Thrd_t *_Thr)
{ // launch a thread
_Thrd_startX(_Thr, _Call_func, this);
while (!_Started)
_Cnd_waitX(_Cond, _Mtx); // <-- Why?
}

template<class _Target> inline
void _Launch(_Thrd_t *_Thr, _Target&& _Tg)
{ // launch a new thread
_LaunchPad<_Target> _Launcher(_STD forward<_Target>(_Tg));
_Launcher._Launch(_Thr);
}

explicit thread(_Fn&& _Fx, _Args&&... _Ax)
{ // construct with _Fx(_Ax...)
_Launch(&_Thr,
_STD make_unique<tuple<decay_t<_Fn>, decay_t<_Args>...> >(
_STD forward<_Fn>(_Fx), _STD forward<_Args>(_Ax)...));
}

谁能告诉我为什么需要等待?

我在问,因为我目前正在检查一个系统,该系统有时需要超过 500 毫秒来构建 std::thread 但从未显示使用 CreateThread 的这种延迟.

最佳答案

_LaunchPad<_Target> _Launcher(_STD forward<_Target>(_Tg));

_Launcher 在堆栈上并传递给新线程。为什么?我不知道,但这使得 _Launcher 在新线程完成之前不要超出范围很重要。等待可能会保证这一点。

关于c++ - 为什么 std::thread 在其构造函数中等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42579625/

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