c - 在没有 C11 线程的情况下,C 标准库函数是否是线程安全的?

标签 c multithreading winapi c11

我正在 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/

相关文章:

c# - 通过注册表更改 PPPoE DSL 连接的代理设置

c++ - 为什么 GID_ZOOM 的中心点会改变?

c - hwnd 转 ppm 问题

c - 在 C 中声明局部变量

c - pthread_join() 不起作用

c - 这个宏到底在做什么?

Java 8 非阻塞读取有竞争条件?

c# - 等待事件的正确方法

c++ - 安全关键软件的 C++ 形式化方法

c - 多维数组到图像