Можете ли вы объяснить, почему в Linux (не в Mac) я получаю ошибку сегментации, когда делаю:
pthread_join(thread2, (void**)&status);
pthread_join(thread1, (void**)&status);
Но это нормально, когда я делаю:
pthread_join(thread1, (void**)&status);
pthread_join(thread2, (void**)&status);
Я попробовал на Mac, и все в порядке, но в Linux код работает правильно, только если я выполняю соединение потока 1, а затем соединение потока 2...
Это мой код:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *print_msg( char *ptr );
main(){
pthread_t thread1, thread2;
char *message1 = "Ping";
char *message2 = "Pong";
int status;
pthread_create(&thread1, NULL, print_msg, message1);
printf("tid thread1= %d\n", (int)thread1);
pthread_create(&thread2, NULL, print_msg, message2);
printf("tid thread2= %d\n", (int)thread2);
pthread_join(thread2, (void**)&status);
pthread_join(thread1, (void**)&status);
printf("Thread 1 end with: %d\n", (int)status);
printf("Thread 2 end with: %d\n", (int)status);
exit(0);
}
void *print_msg( char *ptr ){
char *msg;
void *val=0;
msg = (char *) ptr;
printf("%s \n", msg);
pthread_exit(val);
}
-Wall
и-Wextra
, что говорит о большом количестве потенциальных ошибок. Вы также можете прочитать документ pthread, содержащий пример того, как использоватьpthread_join()
- person SSC   schedule 12.11.2016