我正在 Windows 上编写一个多线程程序。由于我知道没有 C 的 Windows 实现支持 C11 线程,因此我最好的选择是使用 native WinAPI 多线程。但是有一个问题! C库中的一些函数,如malloc
C11 标准要求 I/O 函数是线程安全的。但是,即使 __STDC_NO_THREADS__
,它们是否也必须是线程安全的?被定义为?如果 C 实现中不存在线程设施,那么它们是线程安全的似乎毫无意义,但它确实有帮助,因为我真的不想将所有 I/O 函数包装在互斥锁中。
最佳答案
如果您针对 Microsoft 多线程运行时库进行编译和链接,则 malloc() 之类的函数将是线程安全的。
这不是语言保证,而是由平台保证。
哦,还有 read MSDN carefully .在 C 或 C++ 中使用线程需要使用 _beginthread()
或 _beginthreadex()
, 不是 Win32 CreateThread
更多:https://docs.microsoft.com/en-us/cpp/parallel/multithreading-with-c-and-win32?view=vs-2019
关于c - 在没有 C11 线程的情况下,C 标准库函数是否是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62199766/