C言語pthread_createは複数のパラメータを持つ関数&pthread_を伝達するjoin
pthread_createはクラスUnixオペレーティングシステム(Unix、Linux、Mac OS Xなど)の作成スレッドの関数で、ヘッダファイルはpthread.h中.関数の宣言は次のとおりです.
パラメータの最初のパラメータは、スレッド識別子を指すポインタです.2番目のパラメータは、スレッドのプロパティを設定するために使用されます.3番目のパラメータは、スレッド実行関数の開始アドレスです.最後のパラメータは、関数を実行するパラメータです.
3番目の関数から、入力された関数パラメータはvoid*タイプである必要があることがわかります.しかし,スレッド処理を必要とする関数がマルチパラメータである場合が多い.パラメータを構造体にカプセル化することにより,複数のパラメータを伝達する関数を実現できる.
この構造体ポインタをvoid*パラメータの実際のパラメータとして渡す
次にスレッドの呼び出し関数thr_fnでは、paraを介して入力されるパラメータを以下のように使用することができる.
Additional Mark:コードにpthread_がない場合joinでは、プライマリ・スレッドがすぐに終了し、プロセス全体が終了し、作成したスレッドが実行を開始する機会がなく終了します.pthread_を追加join後、メインスレッドは待機しているスレッドが終了するまで待機し、作成したスレッドを実行する機会を与えます.関数の定義:
説明:pthread_join()関数は、threadで指定されたスレッドの終了をブロックするように待機します.関数が返されると、スレッドを待機していたリソースが回収されます.スレッドが終了すると、関数はすぐに返されます.threadで指定したスレッドはjoinableでなければなりません.パラメータ:thread:スレッド識別子、すなわちスレッドIDは、一意のスレッドを識別します.retval:待機スレッドの戻り値を格納するためにユーザ定義のポインタ.戻り値:0は成功を表します.失敗しました.エラー番号が返されます.
int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,
(void*)(*start_rtn)(void*),void *arg);
// : 0,
パラメータの最初のパラメータは、スレッド識別子を指すポインタです.2番目のパラメータは、スレッドのプロパティを設定するために使用されます.3番目のパラメータは、スレッド実行関数の開始アドレスです.最後のパラメータは、関数を実行するパラメータです.
3番目の関数から、入力された関数パラメータはvoid*タイプである必要があることがわかります.しかし,スレッド処理を必要とする関数がマルチパラメータである場合が多い.パラメータを構造体にカプセル化することにより,複数のパラメータを伝達する関数を実現できる.
struct fun_para
{
var para1;// 1
var para2;// 2
.......
}
この構造体ポインタをvoid*パラメータの実際のパラメータとして渡す
struct fun_para para;
pthread_create(&ntid, NULL, thr_fn,¶);
次にスレッドの呼び出し関数thr_fnでは、paraを介して入力されるパラメータを以下のように使用することができる.
void *thr_fn(void *arg)
{
fun_para *para;
para = (fun_para *) arg;
para->para1;// 1
para->para2;// 2
......
//pthread_exit(0);
return ((void *)0);
}
Additional Mark:コードにpthread_がない場合joinでは、プライマリ・スレッドがすぐに終了し、プロセス全体が終了し、作成したスレッドが実行を開始する機会がなく終了します.pthread_を追加join後、メインスレッドは待機しているスレッドが終了するまで待機し、作成したスレッドを実行する機会を与えます.関数の定義:
int pthread_join(pthread_t thread, void **retval);
説明:pthread_join()関数は、threadで指定されたスレッドの終了をブロックするように待機します.関数が返されると、スレッドを待機していたリソースが回収されます.スレッドが終了すると、関数はすぐに返されます.threadで指定したスレッドはjoinableでなければなりません.パラメータ:thread:スレッド識別子、すなわちスレッドIDは、一意のスレッドを識別します.retval:待機スレッドの戻り値を格納するためにユーザ定義のポインタ.戻り値:0は成功を表します.失敗しました.エラー番号が返されます.
tmp1 = pthread_join(tid, &retval);
if (tmp1 != 0)
{
printf("cannot join with thread1
");
}