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