c-pthread和互斥锁抛出分段核心转储



我正试图使用互斥体来同步线程,但我的代码似乎抛出了一个">分段故障核心转储";每次编译后都会出错。

#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;
}

两件事:

  1. 您在此处取消引用NULL指针:

    *s += *((int *)arg0) * 1000000;
    

    由于您在全局范围内定义了int *s = 0;。您可能想将其定义为int s = 0;,然后在任何地方使用s而不是*s

  2. 正如Rainer Keller在评论中指出的,您并没有初始化您的mutex。您应该将其静态初始化为PTHREAD_MUTEX_INITIALIZER,或者在运行时使用pthread_mutex_init(&mutex)main中初始化。

相关内容

  • 没有找到相关文章

最新更新