【发布时间】:2020-09-23 17:46:54
【问题描述】:
我正在 Windows 上编写一个多线程程序。由于我知道没有支持 C11 线程的 C 的 Windows 实现,因此我最好的选择是使用本机 WinAPI 多线程。但是有一个问题! C 库中的某些函数,例如 malloc 或 I/O 函数,要求 C11 标准是线程安全的。但是即使定义了__STDC_NO_THREADS__,它们是否也必须是线程安全的?如果 C 实现中不存在线程设施,那么它们是线程安全的似乎毫无意义,但它确实会有所帮助,因为我真的不想将所有 I/O 函数包装在互斥体中。
【问题讨论】:
-
我似乎无法调和
I am writing a multi-threaded program和no thread facilities exist in the implementation之间的矛盾。 -
@goodvibration 我的意思是说 C 实现。正如我一开始所说,我使用的是原生 Win32 线程。
-
线程安全是 C11 之前的一个概念。
-
@ChristianGibbons 显然是这样,但是从 C11 开始,一些 C 函数被要求是线程安全的,因为它引入了线程。我的实现不支持它们(它们在标准中是可选的),我在问函数(
malloc()、printf()等是否仍然是线程安全的) -
您必须查看 MSDN 上的相关文档,但大多数情况下是的,至少如果您要链接多线程运行时。
标签: c multithreading winapi c11