这个简单的代码编译得很好,但当我使用pthread_join(t1, NULL)
时,它返回分段故障(核心转储(
int number = 0;
void* change_number(void *x){
printf("helo from some threadn");
int num = *(int *)x;
printf("%dn", number);
number += num;
printf("a thread increased the variable by %dn", num);
}
int main(int argc, char* argv[])
{
pthread_t t1;
pthread_t t2;
printf("1) SUccess code: %dn", pthread_create(&t1, NULL, change_number, (void *) 5));
printf("2) Success code: %dn", pthread_create(&t2, NULL, change_number, (void *) 11));
printf("%dn",pthread_join(t1, NULL));
printf("thread 1 finishedn");
pthread_join(t2, NULL);
}
这里的问题是什么?如果它有任何相关性,我会在VM中运行
正如其他人所指出的,您的问题在(void *) 5
中,这很容易解决:
int foo = 5, bar = 11;
printf("1) SUccess code: %dn", pthread_create(&t1, NULL, change_number, (void *) &foo));
printf("2) Success code: %dn", pthread_create(&t2, NULL, change_number, (void *) &bar));
如前所述,您应该将foo
和bar
变量设置为全局变量。
(void*)5
表示将5
视为指针,其中您似乎想要的是指向包含5的int
变量的指针。