我的目标是我在标题中询问我希望调用者线程在使用 std::thread ctor 和线程函数(非 void ctors)时不等待子线程被物理创建和恢复
当我在 DLL 加载期间尝试使用线程函数创建 std::thread 对象时,我的问题出现了(在 Windows 中)。这是一个问题,因为(据我所知)-线程构造函数尝试创建一个物理线程-Ctor 以某种方式(对我来说不幸)等待物理线程恢复(上线)-不幸的是,Win API 不允许线程如果它们是在该函数调用期间创建的,则在 LoadLibrary 调用中恢复。- 所以我有一个死锁:LoadLibrary 创建一个线程,它等待它恢复,Windows 不允许它恢复。
我可以为这个问题发明一些解决方案(通过有一个不使用 std::thread 的不同线程,它将构造额外的线程(std::threads),但是我错过了使用“仅”std::thread 的全部意义我的线程需要:-))。但是,如果 std::thread 是用线程函数(或 lambda 或其他)构造的,最好告诉它不要等待物理线程恢复。有没有办法做到这一点,或者我应该去解决问题?谢谢
- 另一个需要相同的情况 在快速路径中,我可能会(懒惰地)创建一个 std::thread 对象,向它发布一些任务(许多任务可能),然后继续(在快速路径中)而不需要延迟!我可能不在乎何时真正创建并恢复子线程。如果不能懒惰地在这样的快速路径中或在 DllMain 等期间创建物理线程,那将是很可惜的。