2017-04-12 22 views
0

1つのプロセス内でいくつかのジョブを並列に実行したいとします。 何らかの理由で私が作成したスレッドは一度だけ実行されますので、間違いがどこにあるのか理解してください。Cスレッドは一度だけ実行されます

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

void * print_thread (void * var) 
{ 
    int *p_var = (int *)var; 
    printf("this is a thread %d\n", ++(*p_var)); 

} 

int main() 
{ 
    int x=0; 
    pthread_t thread1; 


    if(pthread_create(&thread1, NULL, print_thread, &x)) 
    { 
     fprintf(stderr, "Error creating thread\n"); 
     return 1; 
    } 

    while (1) 
    { 
     usleep(100000); 
    } 

    return 0; 
} 


# gcc -o thread pthread_example.c -lpthread 
# ./thread 
this is a thread 1 
+0

スレッドを1つ作成するので、通常は1回だけ実行されます。正確に何を期待していますか? 'if(pthread_create(&thread1、NULL、print_thread、&x))'の回りに 'for(x = 1; x

+1

なぜそれが複数回実行されると思われますか? – Marievi

+0

これは私のための新しいことです、私は今それを得ました。どうもありがとう。 – sergeyrar

答えて

2

新しいスレッド「メイン」としてprint_threadを考えるべきです。それは最初から最後まで実行され、スレッドは終了します。 print_threadの中に何らかのループがない限り、それは決して永続しません。

関連する問題