我正在修改一个完全可以重新添加Windows支持的库。问题是初始化功能。初始化函数包含在MUTEX_LOCK(&ssl_lock);
和MUTEX_UNLOCK(&ssl_lock);
中,以便为所有内容仅初始化一次。
问题是我无法在EnterCriticalSection
之前致电InitializeCriticalSection
而InitializeCriticalSection
不可重入。我该如何解决这个问题?
答案 0 :(得分:4)
根据您需要支持的Windows版本,您可以使用“Init Once”API:
如果您需要支持WinXP / Win Server 2003或更早版本,您可能需要依赖内核可以确保仅创建一次的Mutex对象。在打开/创建互斥锁时,您需要实现一些逻辑,以确保所有执行线程都以有效句柄结束(即,尝试打开的循环,然后尝试创建直到打开或创建成功)。
答案 1 :(得分:2)
您可以在DllMain()DLL_PROCESS_ATTACH处理程序中初始化它。