26.6 スレッド管理関数
スレッド管理関数をリストし、説明します。
表26-5は、この項で説明しているスレッド管理関数を示しています。
表26-5 スレッド管理関数
関数 | 用途 |
---|---|
スレッド・ハンドルをクローズします。 |
|
新しいスレッドを作成します。 |
|
コールが行われたスレッドのOCIThreadHandleを取り出します。 |
|
スレッド・ハンドルの破棄および割当て解除を行います。 |
|
スレッド・ハンドルの割当ておよび初期化を行います。 |
|
スレッドIDの破棄および割当て解除を行います。 |
|
コールが行われたスレッドの |
|
スレッドIDの割当ておよび初期化を行います。 |
|
特定の |
|
2つの |
|
|
|
指定された |
|
OCIThreadコンテキストを初期化します |
|
アプリケーションがマルチスレッド環境とシングル・スレッド環境のどちらで動作しているかを、コール元に通知します。 |
|
コール側スレッドから別のスレッドに結合できるようにします。 |
|
|
|
コール側スレッドのキーの現在の値を取得します。 |
|
キーを作成します |
|
コール側スレッドのキー値を設定します。 |
|
コールが行われたスレッドに対してmutexを取得します。 |
|
mutexの破棄および割当て解除を行います。 |
|
mutexの割当ておよび初期化を行います。 |
|
mutexを解放します |
|
OCIThreadプロセスの初期化を行います。 |
|
OCIThreadコンテキストを解放します。 |
26.6.1 OCIThreadClose()
スレッド・ハンドルをクローズします。
用途
スレッド・ハンドルをクローズします。
構文
sword OCIThreadClose ( void *hndl, OCIError *err, OCIThreadHandle *tHnd );
パラメータ
コメント
tHnd
パラメータは、OCIThreadHndInit()
を使用して初期化する必要があります。同一OCIThreadCreate()
コールから戻されたスレッド・ハンドルおよびスレッドIDは、OCIThreadClose()
コール後はどちらも無効になります。
26.6.2 OCIThreadCreate()
新しいスレッドを作成します。
用途
新しいスレッドを作成します。
構文
sword OCIThreadCreate ( void *hndl, OCIError *err, void (*start) (void *), void *arg, OCIThreadId *tid, OCIThreadHandle *tHnd );
パラメータ
コメント
arg
から渡された引数を使用して、start
が指し示している関数コールを実行すると、新しいスレッドが開始します。その関数が復帰すると、新しいスレッドは終了します。関数は値を戻さず、パラメータvoid
を受け入れます。tHnd
がNULL
以外の場合にかぎり、OCIThreadCreate()
コールはOCIThreadClose()
コールに一致する必要があります。
tHnd
がNULL
の場合は、生成されるスレッドの終了のタイミングが不明のため、*tid
内に配置されたスレッドIDはコール側スレッドでは無効になります。
tid
パラメータはOCIThreadIdInit()
によって初期化し、tHnd
はOCIThreadHndInit()
によって初期化します。
26.6.3 OCIThreadHandleGet()
コールが行われたスレッドのOCIThreadHandle
を取り出します。
用途
コールが行われたスレッドのOCIThreadHandle
を取り出します。
構文
sword OCIThreadHandleGet ( void *hndl, OCIError *err, OCIThreadHandle *tHnd );
パラメータ
コメント
tHnd
パラメータは、OCIThreadHndInit()
を使用して初期化する必要があります。
この関数によって取り出されるスレッド・ハンドルtHnd
は、使用後にOCIThreadClose()
を使用してクローズし、OCIThreadHndDestroy()
を使用して破棄する必要があります。
26.6.4 OCIThreadHndDestroy()
スレッド・ハンドルの破棄および割当て解除を行います。
用途
スレッド・ハンドルの破棄および割当て解除を行います。
構文
sword OCIThreadHndDestroy ( void *hndl, OCIError *err, OCIThreadHandle **thnd );
パラメータ
コメント
thnd
パラメータは、OCIThreadHndInit()
を使用して初期化する必要があります。
26.6.5 OCIThreadHndInit()
スレッド・ハンドルの割当ておよび初期化を行います。
用途
スレッド・ハンドルの割当ておよび初期化を行います。
構文
sword OCIThreadHndInit ( void *hndl, OCIError *err, OCIThreadHandle **thnd );
26.6.6 OCIThreadIdDestroy()
スレッドIDの破棄および割当て解除を行います。
用途
スレッドIDの破棄および割当て解除を行います。
構文
sword OCIThreadIdDestroy (void *hndl, OCIError *err, OCIThreadId **tid );
パラメータ
コメント
tid
パラメータは、OCIThreadHndInit()
を使用して初期化する必要があります。
26.6.7 OCIThreadIdGet()
コールされるスレッドのOCIThreadId
を取り出します。
用途
コールされるスレッドのOCIThreadId
を取り出します。
構文
sword OCIThreadIdGet ( void *hndl, OCIError *err, OCIThreadId *tid );
パラメータ
コメント
tid
パラメータは、OCIThreadHndInit()
を使用して初期化する必要があります。OCIThreadがシングル・スレッド環境で使用されている場合、OCIThreadIdGet()
はtid
で指し示される場所に常に同じ値を配置します。その値自体は重要ではありません。重要なのは、この値がNULL
スレッドIDとは異なる値で、常に同じ値であるということです。
26.6.8 OCIThreadIdInit()
スレッドID tid
の割当ておよび初期化を行います。
用途
スレッドID tid
の割当ておよび初期化を行います。
構文
sword OCIThreadIdInit ( void *hndl, OCIError *err, OCIThreadId **tid );
26.6.9 OCIThreadIdNull()
特定のOCIThreadId
がNULL
スレッドIDかどうかを判断します。
用途
特定のOCIThreadId
がNULL
スレッドIDかどうかを判断します。
構文
sword OCIThreadIdNull ( void *hndl, OCIError *err, OCIThreadId *tid, boolean *result );
パラメータ
コメント
tid
がNULL
スレッドIDの場合、result
はTRUE
に設定されます。それ以外の場合、result
はFALSE
に設定されます。tid
パラメータは、OCIThreadIdInit()
を使用して初期化する必要があります。
26.6.10 OCIThreadIdSame()
2つのOCIThreadId
が同じスレッドを表しているかどうかを判断します。
用途
2つのOCIThreadId
が同じスレッドを表しているかどうかを判断します。
構文
sword OCIThreadIdSame ( void *hndl, OCIError *err, OCIThreadId *tid1, OCIThreadId *tid2, boolean *result );
パラメータ
コメント
tid1
およびtid2
が同じスレッドを表す場合、result
はTRUE
に設定されます。それ以外の場合、result
はFALSE
に設定されます。tid1
とtid2
の両方がNULL
スレッドIDの場合、result
パラメータはTRUE
に設定されます。パラメータtid1
およびtid2
は、OCIThreadIdInit()
によって初期化します。
26.6.11 OCIThreadIdSet()
OCIThreadId
を別のOCIThreadIdに設定します。
用途
OCIThreadId
を別のOCIThreadIdに設定します。
構文
sword OCIThreadIdSet ( void *hndl, OCIError *err, OCIThreadId *tidDest, OCIThreadId *tidSrc );
パラメータ
コメント
tid
パラメータは、OCIThreadIdInit()
を使用して初期化する必要があります。
26.6.12 OCIThreadIdSetNull()
指定されたOCIThreadId
にNULL
スレッドIDを設定します。
用途
指定されたOCIThreadId
にNULL
スレッドIDを設定します。
構文
sword OCIThreadIdSetNull ( void *hndl, OCIError *err, OCIThreadId *tid );
パラメータ
コメント
tid
パラメータは、OCIThreadIdInit()
を使用して初期化する必要があります。
26.6.13 OCIThreadInit()
OCIThreadコンテキストを初期化します。
用途
OCIThreadコンテキストを初期化します。
構文
sword OCIThreadInit ( void *hndl, OCIError *err );
パラメータ
コメント
戻されたポインタが指し示しているメモリーを、OCIThreadクライアントから検査しないでください。同時にOCIThreadInit()
コールを実行してください。OCIThreadProcessInit()
と異なり、他のコールより先に初期コールを行う必要はありません。
OCIThreadInit()
の1回目のコールでは、OCIThreadコンテキストが初期化されます。また、そのコンテキストへのポインタを、システム情報も含めて保存します。2回目以降のOCIThreadInit()
コールでは、同じコンテキストが戻されます。
各OCIThreadInit()
コールは、結果的にOCIThreadTerm()
コールに合致する必要があります。
26.6.14 OCIThreadIsMulti()
アプリケーションがマルチスレッド環境とシングル・スレッド環境のどちらで動作しているかを、コール元に通知します。
用途
アプリケーションがマルチスレッド環境とシングル・スレッド環境のどちらで動作しているかを、コール元に通知します。
構文
boolean OCIThreadIsMulti ( );
戻り値
TRUE
- 環境がマルチスレッドの場合。
FALSE
- 環境がシングル・スレッドの場合。
26.6.15 OCIThreadJoin()
コール側スレッドが別のスレッドと結合できるようにします。
用途
コール側スレッドが別のスレッドと結合できるようにします。
構文
sword OCIThreadJoin ( void *hndl, OCIError *err, OCIThreadHandle *tHnd );
パラメータ
コメント
この関数は、指定されたスレッドが終了するまでコール元をブロックします。
tHnd
パラメータは、OCIThreadHndInit()
を使用して初期化する必要があります。複数のスレッドをすべて同一のスレッドに結合した場合、結果は保証されていません。
26.6.16 OCIThreadKeyDestroy()
key
が指し示しているキーの破棄および割当て解除を行います。
用途
key
が指し示しているキーの破棄および割当て解除を行います。
構文
sword OCIThreadKeyDestroy ( void *hndl, OCIError *err, OCIThreadKey **key );
パラメータ
コメント
これは、キー作成ルーチンに渡されるデストラクタ関数コールバックとは異なります。関数OCIThreadKeyDestroy()
は、OCIThreadがkey
を作成する際に取得したすべてのリソースを終了させるのに使用します。OCIThreadKeyInit()
のOCIThreadKeyDestFunc
コールバックは、キー値デストラクタです。キー自体では動作しません。
この関数は、キーの使用が終了した後でコールする必要があります。OCIThreadKeyDestroy()
関数をコールしないと、メモリー・リークが発生する可能性があります。
26.6.17 OCIThreadKeyGet()
コール側スレッドのキーの現在の値を取得します。
用途
コール側スレッドのキーの現在の値を取得します。
構文
sword OCIThreadKeyGet ( void *hndl, OCIError *err, OCIThreadKey *key, void **pValue );
パラメータ
コメント
OCIThreadKeyInit()
を使用して作成されなかったキーに対して、この関数は使用しないでください。
コール側スレッドからキーに値が割り当てられていない場合は、pValue
が指し示す場所にNULL
が配置されます。
26.6.18 OCIThreadKeyInit()
キーを作成します。
用途
キーを作成します。
構文
sword OCIThreadKeyInit (void *hndl, OCIError *err, OCIThreadKey **key, OCIThreadKeyDestFunc destFn );
パラメータ
コメント
このルーチンをコールするたびに、他のキーと異なる新しいキーの割当ておよび生成が行われます。この関数が正常に実行されると、割当ておよび初期化が行われたキーへのポインタが戻されます。このキーは、OCIThreadKeyGet()
およびOCIThreadKeySet()
とともに使用します。すべてのスレッドで、このキーの初期値はNULL
です。
この関数を、key
パラメータに同じ値を指定して、複数回コールしないでください。
destFn
パラメータがNULL
以外の場合は、キーの値がNULL
以外のスレッドが終了するたびに、destFn
によって指し示されているルーチンがコールされます。そのルーチンがコールされるときのパラメータは、1つです。そのパラメータは、スレッド終了時のそのスレッドに対するキーの値です。キーにデストラクタ関数が不要な場合は、destFn
にNULL
を渡します。
26.6.19 OCIThreadKeySet()
コール側スレッドのキー値を設定します。
用途
コール側スレッドのキー値を設定します。
構文
sword OCIThreadKeySet ( void *hndl, OCIError *err, OCIThreadKey *key, void *value );
パラメータ
コメント
OCIThreadKeyInit()
を使用して作成されなかったキーに対して、この関数は使用しないでください。
26.6.20 OCIThreadMutexAcquire()
コールが行われたスレッドに対してmutexを取得します。
用途
コールが行われたスレッドに対してmutexを取得します。
構文
sword OCIThreadMutexAcquire ( void *hndl, OCIError *err, OCIThreadMutex *mutex );
パラメータ
コメント
mutexが別のスレッドによって保持されている場合は、mutexが取得できるまでコール側スレッドはブロックされます。
初期化されていないmutexは取得しないでください。
スレッドによってすでに保持されているmutexを取得するときに、この関数が使用されるかどうかは定義されていません。
26.6.21 OCIThreadMutexDestroy()
mutexの破棄および割当て解除を行います。
用途
mutexの破棄および割当て解除を行います。
構文
sword OCIThreadMutexDestroy ( void *hndl, OCIError *err, OCIThreadMutex **mutex );
パラメータ
コメント
不要になった各mutexは、破棄する必要があります。
初期化されていないmutex、またはスレッドに現在保持されているmutexを破棄しないでください。mutexの破棄は、そのmutexに対する他の操作と同時に行わないでください。また、mutexの破棄後は、そのmutexを使用しないでください。
26.6.22 OCIThreadMutexInit()
mutexの割当ておよび初期化を行います。
用途
mutexの割当ておよび初期化を行います。
構文
sword OCIThreadMutexInit ( void *hndl, OCIError *err, OCIThreadMutex **mutex );
パラメータ
コメント
すべてのmutexは、使用する前に初期化する必要があります。
複数のスレッドから同時に1つのmutexを初期化しないでください。また、mutexは、破棄されるまで初期化しなおさないでください(OCIThreadMutexDestroy()
を参照)。
26.6.23 OCIThreadMutexRelease()
mutexを解放します。
用途
mutexを解放します。
構文
sword OCIThreadMutexRelease ( void *hndl, OCIError *err, OCIThreadMutex *mutex );
パラメータ
コメント
mutexにブロックされているスレッドが存在する場合は、スレッドの1つがmutexを取得し、スレッドのブロックが解除されます。
初期化されていないmutexを解放しないでください。また、スレッドから、そのスレッドが保持していないmutexを解放しないでください。
26.6.24 OCIThreadProcessInit()
OCIThreadプロセスの初期化を実行します。
用途
OCIThreadプロセスの初期化を実行します。
構文
void OCIThreadProcessInit ( );
コメント
この関数をコールする必要があるかどうかは、OCIThreadの使用方法によって決まります。
シングル・スレッド・アプリケーションでは、この関数は必要に応じてコールします。コールする場合、1回目のコールは、他のOCIThread関数のコールよりも先に行う必要があります。この関数の2回目以降のコールには制限はありません。コールしても何も処理されません。
マルチスレッド・アプリケーションでは、この関数は必ずコールする必要があります。1回目のコールは、他のOCIThreadコールよりも先に行う必要があります。つまり、1回目のコールと同時に、他のOCIThread関数のコール(このコールも含みます)を行うことはできません。
この関数の2回目以降のコールには制限はありません。コールしても何も処理されません。
26.6.25 OCIThreadTerm()
OCIThreadコンテキストを解放します。
用途
OCIThreadコンテキストを解放します。
構文
sword OCIThreadTerm ( void *hndl, OCIError *err );
パラメータ
コメント
この関数は、OCIThreadInit()
への各コールに対して1回のみコールする必要があります。
同時にOCIThreadTerm()
コールを行ってください。OCIThreadTerm()
のコール回数がOCIThreadInit()
のコール回数と異なる場合、処理は行われません。コール回数が同じ場合、OCIThreadTerm()
はOCIThread層を終了し、コンテキストに割り当てられていたメモリーを解放します。この操作の後に、そのコンテキストを再使用しないでください。OCIThreadInit()
をコールして新しいコンテキストを取得する必要があります。
関連トピック