我正试图使用互斥体来同步线程,但我的代码似乎抛出了一个">分段故障核心转储";每次编译后都会出错。
#include <pthread.h>
#include <stdio.h>
pthread_mutex_t mutex;
int *s = 0;
void *fonction(void * arg0) {
pthread_mutex_lock( & mutex);
*s += *((int *)arg0) * 1000000;
pthread_mutex_unlock(&mutex);
}
int main() {
pthread_t thread[5];
int ordre[5];
for (int i = 0; i < 5; i++)
ordre[i] = i;
for (int i = 0; i < 5; i++)
pthread_create(&thread[i], NULL, fonction, & ordre[i]);
for (int i = 0; i < 5; i++)
pthread_join(thread[i], NULL);
printf("%dn", * s);
return 0;
}
两件事:
-
您在此处取消引用NULL指针:
*s += *((int *)arg0) * 1000000;
由于您在全局范围内定义了
int *s = 0;
。您可能想将其定义为int s = 0;
,然后在任何地方使用s
而不是*s
。 -
正如Rainer Keller在评论中指出的,您并没有初始化您的
mutex
。您应该将其静态初始化为PTHREAD_MUTEX_INITIALIZER
,或者在运行时使用pthread_mutex_init(&mutex)
在main
中初始化。