プライマリ・コンテンツに移動
Oracle® Call Interfaceプログラマーズ・ガイド
12c リリース1 (12.1)
B72465-07
目次へ移動
目次
索引へ移動
索引

前
次

スレッド管理関数

表17-5は、この項で説明しているスレッド管理関数を示しています。

表17-5 スレッド管理関数

関数 用途

「OCIThreadClose()」

スレッド・ハンドルをクローズします。

「OCIThreadCreate()」

新しいスレッドを作成します。

「OCIThreadHandleGet()」

コールが行われたスレッドのOCIThreadHandleを取り出します。

「OCIThreadHndDestroy()」

スレッド・ハンドルの破棄および割当て解除を行います。

「OCIThreadHndInit()」

スレッド・ハンドルの割当ておよび初期化を行います。

「OCIThreadIdDestroy()」

スレッドIDの破棄および割当て解除を行います。

「OCIThreadIdGet()」

コールが行われたスレッドのOCIThreadIdを取り出します。

「OCIThreadIdInit()」

スレッドIDの割当ておよび初期化を行います。

「OCIThreadIdNull()」

特定のOCIThreadIdNULLスレッドIDかどうかを判断します。

「OCIThreadIdSame()」

2つのOCIThreadIdが同じスレッドを表しているかどうかを判断します。

「OCIThreadIdSet()」

OCIThreadIdを別のOCIThreadIdに設定します。

「OCIThreadIdSetNull()」

指定されたOCIThreadIdNULLスレッドIDを設定します。

「OCIThreadInit()」

OCIThreadコンテキストを初期化します。

「OCIThreadIsMulti()」

アプリケーションがマルチスレッド環境とシングル・スレッド環境のどちらで動作しているかを、コール元に通知します。

「OCIThreadJoin()」

コール側スレッドから別のスレッドに結合できるようにします。

「OCIThreadKeyDestroy()」

keyが指し示しているキーの破棄および割当て解除を行います。

「OCIThreadKeyGet()」

コール側スレッドのキーの現在の値を取得します。

「OCIThreadKeyInit()」

キーを作成します。

「OCIThreadKeySet()」

コール側スレッドのキー値を設定します。

「OCIThreadMutexAcquire()」

コールが行われたスレッドに対してmutexを取得します。

「OCIThreadMutexDestroy()」

mutexの破棄および割当て解除を行います。

「OCIThreadMutexInit()」

mutexの割当ておよび初期化を行います。

「OCIThreadMutexRelease()」

mutexを解放します。

「OCIThreadProcessInit()」

OCIThreadプロセスの初期化を行います。

「OCIThreadTerm()」

OCIThreadコンテキストを解放します。

OCIThreadClose()

用途

スレッド・ハンドルをクローズします。

構文

sword OCIThreadClose ( void             *hndl, 
                       OCIError         *err, 
                       OCIThreadHandle  *tHnd );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーがある場合は、errに記録され、OCI_ERRORが戻されます。OCIErrorGet()のコールによって診断情報を取得できます。

tHnd (IN/OUT)

クローズするOCIThreadスレッド・ハンドルです。

コメント

tHndパラメータは、OCIThreadHndInit()を使用して初期化する必要があります。同一OCIThreadCreate()コールから戻されたスレッド・ハンドルおよびスレッドIDは、OCIThreadClose()コール後はどちらも無効になります。

関連関数

OCIThreadCreate()

OCIThreadCreate()

用途

新しいスレッドを作成します。

構文

sword OCIThreadCreate ( void             *hndl, 
                        OCIError         *err, 
                        void (*start)    (void *),
                        void             *arg, 
                        OCIThreadId      *tid, 
                        OCIThreadHandle  *tHnd );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーがある場合は、errに記録され、OCI_ERRORが戻されます。OCIErrorGet()のコールによって診断情報を取得できます。

start (IN)

新しいスレッドが実行を開始する関数です。

arg (IN)

startが指し示している関数に渡す引数です。

tid (IN/OUT)

NULLでない場合は、新しいスレッドにIDを取得します。

tHnd (IN/OUT)

NULLでない場合は、新しいスレッドにハンドルを取得します。

コメント

argから渡された引数を使用して、startが指し示している関数コールを実行すると、新しいスレッドが開始します。その関数が復帰すると、新しいスレッドは終了します。関数は値を戻さず、パラメータvoidを受け入れます。tHndNULL以外の場合にかぎり、OCIThreadCreate()コールはOCIThreadClose()コールに一致する必要があります。

tHndNULLの場合は、生成されるスレッドの終了のタイミングが不明のため、*tid内に配置されたスレッドIDはコール側スレッドでは無効になります。

tidパラメータはOCIThreadIdInit()によって初期化し、tHndOCIThreadHndInit()によって初期化します。

OCIThreadHandleGet()

用途

コールが行われたスレッドのOCIThreadHandleを取り出します。

構文

sword OCIThreadHandleGet ( void             *hndl,
                           OCIError         *err,
                           OCIThreadHandle  *tHnd );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーがある場合は、errに記録され、OCI_ERRORが戻されます。OCIErrorGet()のコールによって診断情報を取得できます。

tHnd (IN/OUT)

NULL以外の場合は、スレッドのスレッド・ハンドルを配置する場所です。

コメント

tHndパラメータは、OCIThreadHndInit()を使用して初期化する必要があります。

この関数によって取り出されるスレッド・ハンドルtHndは、使用後にOCIThreadClose()を使用してクローズし、OCIThreadHndDestroy()を使用して破棄する必要があります。

OCIThreadHndDestroy()

用途

スレッド・ハンドルの破棄および割当て解除を行います。

構文

sword OCIThreadHndDestroy ( void             *hndl, 
                            OCIError         *err, 
                            OCIThreadHandle  **thnd );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーがある場合は、errに記録され、OCI_ERRORが戻されます。OCIErrorGet()のコールによって診断情報を取得できます。

thnd (IN/OUT)

破棄するスレッド・ハンドルへのポインタのアドレスです。

コメント

thndパラメータは、OCIThreadHndInit()を使用して初期化する必要があります。

OCIThreadHndInit()

用途

スレッド・ハンドルの割当ておよび初期化を行います。

構文

sword OCIThreadHndInit ( void            *hndl, 
                         OCIError        *err,
                         OCIThreadHandle **thnd );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーがある場合は、errに記録され、OCI_ERRORが戻されます。OCIErrorGet()のコールによって診断情報を取得できます。

thnd (OUT)

初期化するスレッド・ハンドルへのポインタのアドレスです。

OCIThreadIdDestroy()

用途

スレッドIDの破棄および割当て解除を行います。

構文

sword OCIThreadIdDestroy (void         *hndl,
                          OCIError     *err,
                          OCIThreadId  **tid );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーが発生してOCI_ERRORが戻された場合、そのエラーはerrに記録され、OCIErrorGet()のコールによって診断情報を取得できます。

tid (IN/OUT)

破棄するスレッドIDへのポインタです。

コメント

tidパラメータは、OCIThreadHndInit()を使用して初期化する必要があります。

OCIThreadIdGet()

用途

コールされるスレッドのOCIThreadIdを取り出します。

構文

sword OCIThreadIdGet ( void         *hndl,
                       OCIError     *err, 
                       OCIThreadId  *tid );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーがある場合は、errに記録され、OCI_ERRORが戻されます。OCIErrorGet()のコールによって診断情報を取得できます。

tid (OUT)

コール側スレッドのIDを配置する場所を指し示す必要があります。

コメント

tidパラメータは、OCIThreadHndInit()を使用して初期化する必要があります。OCIThreadがシングル・スレッド環境で使用されている場合、OCIThreadIdGet()tidで指し示される場所に常に同じ値を配置します。その値自体は重要ではありません。重要なのは、この値がNULLスレッドIDとは異なる値で、常に同じ値であるということです。

OCIThreadIdInit()

用途

スレッドID tidの割当ておよび初期化を行います。

構文

sword OCIThreadIdInit ( void         *hndl,
                        OCIError     *err, 
                        OCIThreadId  **tid );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーが発生してOCI_ERRORが戻された場合、そのエラーはerrに記録され、OCIErrorGet()のコールによって診断情報を取得できます。

tid (OUT)

初期化するスレッドIDへのポインタです。

OCIThreadIdNull()

用途

特定のOCIThreadIdNULLスレッドIDかどうかを判断します。

構文

sword OCIThreadIdNull ( void         *hndl, 
                        OCIError     *err, 
                        OCIThreadId  *tid, 
                        boolean      *result );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーがある場合は、errに記録され、OCI_ERRORが戻されます。OCIErrorGet()のコールによって診断情報を取得できます。

tid (IN)

チェックするOCIThreadIdへのポインタです。

result (IN/OUT)

結果へのポインタです。

コメント

tidNULLスレッドIDの場合、resultTRUEに設定されます。それ以外の場合、resultFALSEに設定されます。tidパラメータは、OCIThreadIdInit()を使用して初期化する必要があります。

OCIThreadIdSame()

用途

2つのOCIThreadIdが同じスレッドを表しているかどうかを判断します。

構文

sword OCIThreadIdSame ( void          *hndl, 
                        OCIError      *err,
                        OCIThreadId   *tid1, 
                        OCIThreadId   *tid2, 
                        boolean       *result );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーがある場合は、errに記録され、OCI_ERRORが戻されます。OCIErrorGet()のコールによって診断情報を取得できます。

tid1 (IN)

最初のOCIThreadIdへのポインタです。

tid2 (IN)

2番目のOCIThreadIdへのポインタです。

result (IN/OUT)

結果へのポインタです。

コメント

tid1およびtid2が同じスレッドを表す場合、resultTRUEに設定されます。それ以外の場合、resultFALSEに設定されます。tid1tid2の両方がNULLスレッドIDの場合、resultパラメータはTRUEに設定されます。パラメータtid1およびtid2は、OCIThreadIdInit()によって初期化します。

OCIThreadIdSet()

用途

OCIThreadIdを別のOCIThreadIdに設定します。

構文

sword OCIThreadIdSet ( void         *hndl,
                       OCIError     *err,
                       OCIThreadId  *tidDest, 
                       OCIThreadId  *tidSrc );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーが発生してOCI_ERRORが戻された場合、そのエラーはerrに記録され、OCIErrorGet()のコールによって診断情報を取得できます。

tidDest (OUT)

設定後のOCIThreadIdの場所を指し示す必要があります。

tidSrc (IN)

設定前のOCIThreadIdを指し示す必要があります。

コメント

tidパラメータは、OCIThreadIdInit()を使用して初期化する必要があります。

OCIThreadIdSetNull()

用途

指定されたOCIThreadIdNULLスレッドIDを設定します。

構文

sword OCIThreadIdSetNull ( void         *hndl,
                           OCIError     *err, 
                           OCIThreadId  *tid );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーがある場合は、errに記録され、OCI_ERRORが戻されます。OCIErrorGet()のコールによって診断情報を取得できます。

tid (OUT)

NULLスレッドIDを設定するOCIThreadIdを指し示す必要があります。

コメント

tidパラメータは、OCIThreadIdInit()を使用して初期化する必要があります。

OCIThreadInit()

用途

OCIThreadコンテキストを初期化します。

構文

sword OCIThreadInit ( void      *hndl,
                      OCIError  *err );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーが発生してOCI_ERRORが戻された場合、そのエラーはerrに記録され、OCIErrorGet()のコールによって診断情報を取得できます。

コメント

戻されたポインタが指し示しているメモリーを、OCIThreadクライアントから検査しないでください。同時にOCIThreadInit()コールを実行してください。OCIThreadProcessInit()と異なり、他のコールより先に初期コールを行う必要はありません。

OCIThreadInit()の1回目のコールでは、OCIThreadコンテキストが初期化されます。また、そのコンテキストへのポインタを、システム情報も含めて保存します。2回目以降のOCIThreadInit()コールでは、同じコンテキストが戻されます。

OCIThreadInit()コールは、結果的にOCIThreadTerm()コールに合致する必要があります。

関連関数

OCIThreadTerm()

OCIThreadIsMulti()

用途

アプリケーションがマルチスレッド環境とシングル・スレッド環境のどちらで動作しているかを、コール元に通知します。

構文

boolean OCIThreadIsMulti ( );

戻り値

TRUE - 環境がマルチスレッドの場合。

FALSE- 環境がシングル・スレッドの場合。

OCIThreadJoin()

用途

コール側スレッドが別のスレッドと結合できるようにします。

構文

sword OCIThreadJoin ( void             *hndl,
                      OCIError         *err, 
                      OCIThreadHandle  *tHnd );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーがある場合は、errに記録され、OCI_ERRORが戻されます。OCIErrorGet()のコールによって診断情報を取得できます。

tHnd (IN)

結合するスレッドのOCIThreadHandleです。

コメント

この関数は、指定されたスレッドが終了するまでコール元をブロックします。

tHndパラメータは、OCIThreadHndInit()を使用して初期化する必要があります。複数のスレッドをすべて同一のスレッドに結合した場合、結果は保証されていません。

OCIThreadKeyDestroy()

用途

keyが指し示しているキーの破棄および割当て解除を行います。

構文

sword OCIThreadKeyDestroy ( void          *hndl,
                            OCIError      *err, 
                            OCIThreadKey  **key );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーが発生してOCI_ERRORが戻された場合、そのエラーはerrに記録され、OCIErrorGet()のコールによって診断情報を取得できます。

key (IN/OUT)

キーを破棄するOCIThreadKeyです。

コメント

これは、キー作成ルーチンに渡されるデストラクタ関数コールバックとは異なります。関数OCIThreadKeyDestroy()は、OCIThreadがkeyを作成する際に取得したすべてのリソースを終了させるのに使用します。OCIThreadKeyInit()OCIThreadKeyDestFuncコールバックは、キー値デストラクタです。キー自体では動作しません。

この関数は、キーの使用が終了した後でコールする必要があります。OCIThreadKeyDestroy()関数をコールしないと、メモリー・リークが発生する可能性があります。

OCIThreadKeyGet()

用途

コール側スレッドのキーの現在の値を取得します。

構文

sword OCIThreadKeyGet ( void          *hndl, 
                        OCIError      *err, 
                        OCIThreadKey  *key, 
                        void          **pValue );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーが発生してOCI_ERRORが戻された場合、そのエラーはerrに記録され、OCIErrorGet()のコールによって診断情報を取得できます。

key (IN)

キーです。

pValue (IN/OUT)

スレッド固有のキー値を配置する場所です。

コメント

OCIThreadKeyInit()を使用して作成されなかったキーに対して、この関数は使用しないでください。

コール側スレッドからキーに値が割り当てられていない場合は、pValueが指し示す場所にNULLが配置されます。

OCIThreadKeyInit()

用途

キーを作成します。

構文

sword OCIThreadKeyInit (void                  *hndl, 
                        OCIError              *err,
                        OCIThreadKey          **key,
                        OCIThreadKeyDestFunc  destFn );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーが発生してOCI_ERRORが戻された場合、そのエラーはerrに記録され、OCIErrorGet()のコールによって診断情報を取得できます。

key (OUT)

新しいキーの作成を行うOCIThreadKeyです。

destFn (IN)

キーのデストラクタです。NULLでもかまいません。

コメント

このルーチンをコールするたびに、他のキーと異なる新しいキーの割当ておよび生成が行われます。この関数が正常に実行されると、割当ておよび初期化が行われたキーへのポインタが戻されます。このキーは、OCIThreadKeyGet()およびOCIThreadKeySet()とともに使用します。すべてのスレッドで、このキーの初期値はNULLです。

この関数を、keyパラメータに同じ値を指定して、複数回コールしないでください。

destFnパラメータがNULL以外の場合は、キーの値がNULL以外のスレッドが終了するたびに、destFnによって指し示されているルーチンがコールされます。そのルーチンがコールされるときのパラメータは、1つです。そのパラメータは、スレッド終了時のそのスレッドに対するキーの値です。キーにデストラクタ関数が不要な場合は、destFnNULLを渡します。

OCIThreadKeySet()

用途

コール側スレッドのキー値を設定します。

構文

sword OCIThreadKeySet ( void           *hndl,
                        OCIError       *err, 
                        OCIThreadKey   *key,
                        void           *value );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーが発生してOCI_ERRORが戻された場合、そのエラーはerrに記録され、OCIErrorGet()のコールによって診断情報を取得できます。

key (IN/OUT)

キーです。

value (IN)

キーに設定するスレッド固有の値です。

コメント

OCIThreadKeyInit()を使用して作成されなかったキーに対して、この関数は使用しないでください。

OCIThreadMutexAcquire()

用途

コールが行われたスレッドに対してmutexを取得します。

構文

sword OCIThreadMutexAcquire ( void            *hndl,
                              OCIError        *err, 
                              OCIThreadMutex  *mutex );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーがある場合は、errに記録され、OCI_ERRORが戻されます。OCIErrorGet()のコールによって診断情報を取得できます。

mutex (IN/OUT)

取得するmutexです。

コメント

mutexが別のスレッドによって保持されている場合は、mutexが取得できるまでコール側スレッドはブロックされます。

初期化されていないmutexは取得しないでください。

スレッドによってすでに保持されているmutexを取得するときに、この関数が使用されるかどうかは定義されていません。

OCIThreadMutexDestroy()

用途

mutexの破棄および割当て解除を行います。

構文

sword OCIThreadMutexDestroy ( void           *hndl, 
                              OCIError       *err, 
                              OCIThreadMutex **mutex );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーが発生してOCI_ERRORが戻された場合、そのエラーはerrに記録され、OCIErrorGet()のコールによって診断情報を取得できます。

mutex (IN/OUT)

破棄するmutexです。

コメント

不要になった各mutexは、破棄する必要があります。

初期化されていないmutex、またはスレッドに現在保持されているmutexを破棄しないでください。mutexの破棄は、そのmutexに対する他の操作と同時に行わないでください。また、mutexの破棄後は、そのmutexを使用しないでください。

OCIThreadMutexInit()

用途

mutexの割当ておよび初期化を行います。

構文

sword OCIThreadMutexInit ( void            *hndl,
                           OCIError        *err, 
                           OCIThreadMutex  **mutex );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーが発生してOCI_ERRORが戻された場合、そのエラーはerrに記録され、OCIErrorGet()のコールによって診断情報を取得できます。

mutex (OUT)

初期化するmutexです。

コメント

すべてのmutexは、使用する前に初期化する必要があります。

複数のスレッドから同時に1つのmutexを初期化しないでください。また、mutexは、破棄されるまで初期化しなおさないでください(OCIThreadMutexDestroy()を参照)。

OCIThreadMutexRelease()

用途

mutexを解放します。

構文

sword OCIThreadMutexRelease ( void            *hndl,
                              OCIError        *err, 
                              OCIThreadMutex  *mutex );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーが発生してOCI_ERRORが戻された場合、そのエラーはerrに記録され、OCIErrorGet()のコールによって診断情報を取得できます。

mutex (IN/OUT)

解放するmutexです。

コメント

mutexにブロックされているスレッドが存在する場合は、スレッドの1つがmutexを取得し、スレッドのブロックが解除されます。

初期化されていないmutexを解放しないでください。また、スレッドから、そのスレッドが保持していないmutexを解放しないでください。

OCIThreadProcessInit()

用途

OCIThreadプロセスの初期化を実行します。

構文

void OCIThreadProcessInit ( );

コメント

この関数をコールする必要があるかどうかは、OCIThreadの使用方法によって決まります。

シングル・スレッド・アプリケーションでは、この関数は必要に応じてコールします。コールする場合、1回目のコールは、他のOCIThread関数のコールよりも先に行う必要があります。この関数の2回目以降のコールには制限はありません。コールしても何も処理されません。

マルチスレッド・アプリケーションでは、この関数は必ずコールする必要があります。1回目のコールは、他のOCIThreadコールよりも先に行う必要があります。つまり、1回目のコールと同時に、他のOCIThread関数のコール(このコールも含みます)を行うことはできません。

この関数の2回目以降のコールには制限はありません。コールしても何も処理されません。

OCIThreadTerm()

用途

OCIThreadコンテキストを解放します。

構文

sword OCIThreadTerm ( void      *hndl, 
                      OCIError  *err );

パラメータ

hndl (IN/OUT)

OCI環境ハンドルまたはユーザー・セッション・ハンドルです。

err (IN/OUT)

OCIエラー・ハンドルです。エラーが発生してOCI_ERRORが戻された場合、そのエラーはerrに記録され、OCIErrorGet()のコールによって診断情報を取得できます。

コメント

この関数は、OCIThreadInit()への各コールに対して1回のみコールする必要があります。

同時にOCIThreadTerm()コールを行ってください。OCIThreadTerm()のコール回数がOCIThreadInit()のコール回数と異なる場合、処理は行われません。コール回数が同じ場合、OCIThreadTerm()はOCIThread層を終了し、コンテキストに割り当てられていたメモリーを解放します。この操作の後に、そのコンテキストを再使用しないでください。OCIThreadInit()をコールして新しいコンテキストを取得する必要があります。

関連関数

OCIThreadInit()