从系统生成的线程调用 CRT

Calling CRT from system spawned thread

提问人:OwnageIsMagic 提问时间:9/19/2023 更新时间:9/23/2023 访问量:77

问:

系统使用而不是_beginthread回调,如 ServiceMainRegisterServiceCtrlHandlerExHandlerRoutine() 等。这是否意味着从这些线程调用静态链接的 CRT 是不安全的?Create{Remote}ThreadSetConsoleCtrlHandler

C++ C、 WinAPI msvcrt crt

评论

0赞 Hans Passant 9/19/2023
Win2000 中添加的对线程池的支持将更加相关,这些线程也不是通过 _beginthread 启动的。这大约是很久以前不依赖_beginthread是安全的。肯定是从 VC8(又名 VS2005)开始的,可能是 VC70 和 VC71。
0赞 OwnageIsMagic 9/19/2023
@HansPassant我特意加粗了.它如何在共享 crt dll 中没有回调的情况下初始化线程局部变量,例如 gmtimestatically linked CRTerrnoDllMain
0赞 Hans Passant 9/19/2023
github.com/Chuyu-Team/VC-LTL/blob/......

答:

0赞 OwnageIsMagic 9/23/2023 #1

在现代(基于 UCRT)中,运行时不执行任何初始化。它仅提供次要服务,例如防止模块在线程运行时卸载,并选择性地初始化 WinRT ()。_beginthread{ex}RoInitialize