分段錯誤你能解釋爲什麼在Linux中(而不是在蘋果機)我得到段錯誤,當我做:更改順序將返回在Linux上
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'編譯你的代碼,這會告訴你很多潛在的錯誤。你也可以讀作[並行線程DOC(http://man7.org/linux/man-pages/man3/pthread_create.3.html),其中包含例如如何使用'在pthread_join()' – SSC