c - 你如何以可重入的方式 InitializeCriticalSection?

标签 c windows multithreading

我正在修改一个完全可重入的库以添加 Windows 支持。问题是初始化函数。初始化函数包含在 MUTEX_LOCK(&ssl_lock);MUTEX_UNLOCK(&ssl_lock); 中,以确保所有内容仅初始化一次。

问题是我无法在 InitializeCriticalSection 之前调用 EnterCriticalSection 并且 InitializeCriticalSection 不可重入。我该如何解决这个问题?

最佳答案

根据您需要支持的 Windows 版本,您可以使用“Init Once”API:

如果您需要支持 WinXP/Win Server 2003 或更早版本,您可能需要依赖内核可以确保只创建一次的 Mutex 对象。在打开/创建互斥锁时,您需要实现一些逻辑,以确保所有执行线程都以有效句柄结束(即尝试打开的循环,然后尝试创建直到打开或创建成功)。

关于c - 你如何以可重入的方式 InitializeCriticalSection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12169127/

相关文章:

c - PQunescapeBytea() 为 E'\n'::bytea 返回类似 "x0a"的字符串

c - 如何从 c 字符串中读取特定数量的字符?

java - 修复了线程池线程阻塞,当提交了足够多的任务时

php - 如何在 Windows 托管服务器上运行 .php 文件

c++ - PCL:如何更新 pcl::visualizer 中的法线云?

.net - 从 .NET 中的另一个线程更改 UI 元素

c - Linux共享内存段错误

php - PHP和C语言中的自增运算符

c++ - 返回 (\r) 中断 cout

Android Studio - Windows 与 Ubuntu 与 macOS