DLLOCKINIT(3) | FreeBSD Library Functions Manual | DLLOCKINIT(3) |
名称
dllockinit — ダイナミックリンカでのレジスタスレッドロック方法ライブラリ
Standard C Library (libc, -lc)書式
#include < dlfcn.h> void
dllockinit( void *context, void *(*lock_create)(void *context), void (*rlock_acquire)(void *lock), void (*wlock_acquire)(void *lock), void (*lock_release)(void *lock), void (*lock_destroy)(void *lock), void (*context_destroy)(void *context));
解説
スレッドパッケージは、ダイナミックリンカが使用するためのレジスタロック関数の初期化時に、 dllockinit() を呼ぶことができます。ダイナミックリンカは、これによって多数のスレッドがそのクリティカルセクションに同時に入るのを防ぐことができます。
context 引数はロックを作成するために不透明なコンテキストを指定します。それを必要とするロックを作成する時、ダイナミックリンカはそれを lock_create 関数へ渡すでしょう。ロックする関数を使用して、ダイナミックリンカが永久に終了される場合 (例えば、プログラムが新しいロック関数を登録するために dllockinit() への後の呼び出しを行う場合)、コンテキストを破壊するために context_destroy を呼び出します。
lock_create 引数は読み込み/書き込みロックを作成するために関数を指定します。それは新しいロックへのポインタを返さなければなりません。
rlock_acquire と wlock_acquire 引数は、読み込みか書き込みためのロックを施錠する関数をそれぞれ指定します。 lock_release 引数は、ロックを開錠する関数を指定します。これらの関数のそれぞれはロックへのポインタが渡されます。
lock_destroy 引数は、ロックを破壊する関数を指定します。ロックを破壊する必要がない場合、それは NULL にできます。 context_destroy 引数は、コンテキストを破壊する関数を指定します。コンテキストを破壊する必要がない場合、それは NULL にできます。
dllockinit() が呼ばれるまで、ダイナミックリンカは、 SIGVTALRM、 SIGPROF および SIGALRM シグナルのブロックにより作動するメカニズムをロックするデフォルトを使用して、クリティカルセクションを保護します。これは、それらは典型的に先取り実装のためにこれらのシグナルのうちの 1 つを使用する、多くのアプリケーションレベルスレッドパッケージに十分です。 dllockinit() でそれ自身のロック方法を登録したアプリケーションは、すべての引数を NULL で dllockinit() を呼び出すことによりデフォルトのロックを復旧できます。
歴史
dllockinit() 関数は、 FreeBSD 4.0 ではじめて登場しました。July 5, 2000 | FreeBSD |