ノード:Thread Saftey in libltdl, 次:, 前:Modules for libltdl, 上:Using libltdl



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

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

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

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

void lt_dlmutex_unlock (void) Type
アンロック関数に一致する型です.

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

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

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

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

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