2

我正在修改一个完全可重入的库以添加 Windows 支持。问题是初始化函数。初始化函数被包裹起来,MUTEX_LOCK(&ssl_lock);MUTEX_UNLOCK(&ssl_lock);保证一切都只初始化一次。

问题是我EnterCriticalSection之前不能打电话InitializeCriticalSectionInitializeCriticalSection也不能重入。我该如何解决这个问题?

4

2 回答 2

4

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

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

于 2012-08-29T00:07:23.000 回答
2

您可以在 DllMain() DLL_PROCESS_ATTACH 处理程序中对其进行初始化。

于 2012-08-28T23:56:08.017 回答