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()をコールして新しいコンテキストを取得する必要があります。
関連トピック