2012-02-21 2 views
2
void myThread(void *arg) { 
    printf("Thread ran!\n"); 
    pthread_exit(NULL); 
} 

int main() { 
    int ret; 
    pthread_t mythread; 
    ret=pthread_create(&mythread,NULL,myThread,NULL); 
    if (ret != 0) { 
      printf("Can’t create pthread (%s)\n", strerror(errno)); 
      exit(-1); 
    } 
    return 0; 
} 

ответ

4

Вы должны подождать в основной теме, используйте pthread_join() после звонка pthread_create().

8

Потому что main возвращается сразу, прежде чем поток имеет шанс выполнить - попробуйте добавить sleep(1000); до return 0;, и вы, вероятно, обнаружите, что он работает.

Если вы хотите, чтобы main подождал, пока закончится нить, попробуйте pthread_join (но тогда у вас также может не получиться нить).

pthread_join(mythread, 0); 
return 0; 
+1

Почему сон() ваш первый совет? В этом случае это плохая практика. – UmNyobe

+1

Просто, чтобы продемонстрировать, действительно. Очевидно, что спят, но не настолько очевидны, что делает pthread_join, если вы новичок в многопоточности. –

+0

Спасибо, но учтите, что ошибки этого кода выглядят следующим образом: 1) неопределенная ссылка на 'pthread_create '\t 2) make: *** [Test] Ошибка 1 –