Next: , Previous: Modules for libltdl, Up: Using libltdl


10.3 マルチスレッド環境でのlibtldlの使用

lt_dlmutex_register()関数を使用し,適切なコールバック関数の定義 を提供することで,libltdlをマルチスレッド環境で使用することが可能です.

— Type: void lt_dlmutex_lock (void)

これは,ミューテックスロックが必要なlibltdlの実装コードの部分の,最初 に呼び出される関数のアドレスを持っている,関数のポインタ型です.

libltdlは本質的に再帰的なので,これらのコールバック関数によって使用さ れるロックメカニズムが再入可能であることは重要で,そうでなければ,おか しな問題が発生します.

— Type: void lt_dlmutex_unlock (void)

アンロック関数に一致する型です.

— Type: void lt_dlmutex_seterror (const char *error);

libltdl apiの関数の多くは,エラーを発生したクライアントを示す,特 殊な返り値をとります.通常(シングルスレッドアプリケーションでは),内部 から回収することができるエラーを記述する文字列は,lt_dlerror() に保存されます.

この形式の関数は,それがマルチスレッドのコンテクストで動作するように, ライブラリに登録される必要があります.関数は,スレッドローカルストレー ジに渡されるあらゆるエラーメッセージを保存すべきです.

— Type: const char * lt_dlmutex_geterror (void)

スレッドローカルのストレージに,最後にエラーメッセージを保存したものに 関連するコールバック関数に一致する型です.

正しく登録されたとき,クライアントに対するエラーメッセージを回収するた めに,全てのスレッドからlt_dlerror())によって,この関数は使用さ れます.

— Function: int lt_dlmutex_register (lt_dlmutex_lock *lock, lt_dlmutex_unlock *unlock, lt_dlmutex_set_error *seterror, lt_dlmutex_geterror *geterror)

libltdlのマルチスレッドの準備で,上記のそれぞれの関数の型を登録するた めに,この関数を使用してください.全ての引数は,有効なNULLでな い関数アドレスにする必要があり,また,そうでない場合は,シングルスレッ ドオペレーションへの返り値として,全てNULLにする必要があります.