2

Windows サポートを追加するために、完全に再入可能であるライブラリを変更しています。問題は初期化関数です。すべてが一度だけ初期化されることを保証するために、初期化関数はMUTEX_LOCK(&ssl_lock);andでラップされます。MUTEX_UNLOCK(&ssl_lock);

問題は、EnterCriticalSection前にInitializeCriticalSection呼び出すことができずInitializeCriticalSection、再入可能でないことです。この問題を解決するにはどうすればよいですか?

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 に答える