Linuxシステム-スレッド関数の戻り値

5285 ワード

Linuxシステム-スレッド関数戻り値pthread_join() pthread_exit()


インプリメンテーションコード

#include
#include
#include
using namespace std;

void *returnVal(void *arg) {
	int value = 1024;
	//int *p = &value;
	int *p = new int(1024);
	pthread_exit(p);
}

int main(int argc, char const * argv[]) {
	pthread_t tid;
	void *returnValue;
	if(pthread_create(&tid, NULL, returnVal, NULL)) {
		printf("Thread create error!
"
); abort(); } pthread_join(tid, &returnValue); printf("return value is %d
"
, *(int*)returnValue); return 0; }

出力結果

return value is  1024

に注意

  • コンパイルプロセス
  • g++ -pthread pthreadCreateTest.cpp -o pthreadParameterTest
    ./pthreadParameterTest
    
  • bugスレッド直線関数に注釈されたコードを変更し、ポインタpを局所変数valueに向けてpを戻り値とすると、スレッド実行が終了してユーザスタックの局所変数が解放され、戻ったpポインタに対応するメモリが解放され、予想外の値が出力される.
  • ソリューションは、上述した動的に記憶空間を開くことによって、返されるコンテンツがメモリに対応してスレッドの実行が終了して解放されることを保証し、予想される結果を得ることができる.

  • pthread_join()

  • 戻り値が正常であれば0を返し、そうでなければエラーコード
  • を返す.
  • 関数宣言int pthread_join(pthread_t thread, void **retval);
  • パラメータthreadは、新規スレッドのID
  • を返す.
  • パラメータretval戻りプロセス関数戻り値
  • pthread_exit()

  • 戻り値なし
  • 関数宣言void pthread_exit(void* retval); パラメータretvalはスレッド実行関数の戻り値であり、呼び出しpthread_に戻ります.join()のスレッド、pthread_に戻るjoin()関数のretval 2次ポインタの
  • 最後に

  • ブロガーのレベルが限られているため、漏れが避けられないので、読者がいつでも批判して指摘することを歓迎して、不要な誤解をもたらさないようにします!