作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在修改一个完全可重入的库以添加 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/
我正在修改一个完全可重入的库以添加 Windows 支持。问题是初始化函数。初始化函数包含在 MUTEX_LOCK(&ssl_lock); 和 MUTEX_UNLOCK(&ssl_lock); 中,以
我是一名优秀的程序员,十分优秀!