時には、スレッド内の別のスレッドを作成し、メインスレッドは、スレッドの作成の復帰まで待機するサスペンションをスレッドする必要性に、終了後にこの時間は、スレッドの戻り値をキャプチャします。
int型pthread_joinを(がpthread_t番目のボイド** thr_return)。
pthread_joinを関数は、指定されたスレッドが終了番目まで、現在のスレッドを一時停止過ごしました。
/ * ** hangup.c ** * / 書式#include <stdio.hに> する#include <pthread.hの> の#include <ERRNO.H> 書式#include < 文字列の.h> の#include <stdlib.h>に含まれ、ボイド * FUNC(ボイド *の引数) { int型私= 0 ; 用(; iは< 5 ; iは++ ) { のprintf(" FUNCラン%Dを\ n " 、I)。 睡眠(1 )。 } INT * P =(INT *)のmalloc( sizeof(int型)); * P = 11 。 リターンのp; } int型のmain() { がpthread_t T1。 INT ERR =のpthread_create(&T1、NULL、FUNC、NULL); もし(0!= ERR) { のprintf(" thread_createはfailled:%S \ nを" 、はstrerror(errnoに))。 } 他 { のprintf(" thread_create成功する\ n " ); } ボイド *はP = NULL; pthread_joinを(T1、 &P); printf(" 糸出口:コード=%d個の\ n "、*(INT * )P); 戻りEXIT_SUCCESS; }
結果:
exbotする@ Ubuntuの:〜/ wangqinghe /スレッド/ 20190729 $ gccのhangup.c -oハングアップ-lpthread
exbotする@ Ubuntuの:〜/ wangqinghe /スレッド/ 20190729 $ ./hangup
thread_create成功
FUNCラン0
FUNCラン1
FUNCラン2
FUNCラン3
FUNCラン4
糸出口:コード= 11
主な機能は、完了するのを待ち、終了したスレッドの実行の戻り値を取得するために実行のスレッドで作成されています。
問題:
malloc関数は、{}内のスタック空間を返す方法、割り当てられたヒープ領域です。疑わしいです。