C言語pthread_createは複数のパラメータを持つ関数&pthread_を伝達するjoin


pthread_createはクラスUnixオペレーティングシステム(Unix、Linux、Mac OS Xなど)の作成スレッドの関数で、ヘッダファイルはpthread.h中.関数の宣言は次のとおりです.
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,&para);

次にスレッドの呼び出し関数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
"
); }