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

时间:2012-08-28 23:53:37

标签: c windows multithreading

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

问题是我无法在EnterCriticalSection之前致电InitializeCriticalSectionInitializeCriticalSection不可重入。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

您可以在DllMain()DLL_PROCESS_ATTACH处理程序中初始化它。