2016-05-11 7 views
-1

私はこの簡単な例を書いて、Cのスレッドプログラミングを理解しました。「スレッド0」と書かれていたはずです。しかし、出力はありません。 ここにコードがあります。Pthread_tが起動していない

#include <stdio.h> 
#include <stdlib.h> 
#include <pthread.h> 

int i=0; 
pthread_mutex_t mutex; 

void * fonction(){ 
    pthread_mutex_lock(&mutex); 
    printf("thread %d \n",i++); 
    pthread_mutex_unlock(&mutex); 
    pthread_exit(NULL); 
} 

int main(){ 
    pthread_t a; 
    pthread_mutex_init(&mutex,NULL); 
    pthread_create(&a,NULL,fonction,NULL); 
    return EXIT_SUCCESS; 
} 

誰かが私を助けることができますか? シモンズ:私はそれをコンパイルするためにこれを使用

gcc -pthread test.c -o test 
+1

'pthread_join'を参照してください。 – WhozCraig

答えて

4

子スレッドがmain()戻る前に終了したことを確認するためにpthread_create()後とreturn EXIT_SUCCESS;pthread_join(a, NULL)を挿入します。

+0

おかげさまで私のプログラムに追加しましたが、今は動作しています。同期の問題を避けるためにpthread_joinを置く必要がありますか? – kevin556

3

pthread_join()は方法ですが、のみソリューションではありません。

メインスレッドが(作成するスレッドよりも)長い時間生きていない(必要な)場合は、単にpthread_exit(0)で終了できます。

メインスレッドがpthread_exit()を使用して終了すると、プロセス内のの最後のスレッドが終了するまで、プロセスは動作し続けます。

これは、メインスレッドが初期化/セットアップを行い、複数のスレッドを開始し、それがもう必要ない場合に便利です。 それ以外の場合は、すべてのスレッドが完了するのを待たなければなりません(main()が終了すると、プロセス全体が終了します)。pthread_exit()を呼び出すと、スレッドのみが終了します。

関連する問題