Pthread Mutex Segfault

时间:2014-11-06 17:05:24

标签: c multithreading segmentation-fault pthreads mutex

我之前从未使用过pthreads,只是想让自己熟悉它们。因此,我编写了以下测试代码:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

int count = 0;

void *increment(void *tex);

int main(int argc, char **argv) {
    pthread_t t1, t2, t3;
    pthread_mutex_t mutex;
    pthread_mutex_init(&mutex, NULL);
    pthread_create(&t1, NULL, &increment, &mutex);
    pthread_create(&t2, NULL, &increment, &mutex);
    pthread_create(&t2, NULL, &increment, &mutex);
    pthread_join(t1, NULL);
    pthread_join(t2, NULL);
    pthread_join(t3, NULL);
    printf("Value of count is: %d\n", count);
}

void *increment(void *tex) {
    pthread_mutex_t *mutex = (pthread_mutex_t *) mutex;
    for (int i = 0; i < 100; i++) {
        pthread_mutex_lock(mutex);
        count++;
        pthread_mutex_unlock(mutex);
    }
    return NULL;
}

我正在使用正确的-pthread标志使用GCC编译代码,但无论出于何种原因,任何线程都会到达互斥锁定行,segfault。在使用GDB进一步调查之后,我发现互斥指针在增量函数内部似乎是无效的,即使我在main中初始化它,将其作为参数传递给pthread_create,并在每个线程上调用了join以确保主要还在范围内。我为何会发生这种情况感到茫然,并且可以使用一些帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

你有:

pthread_mutex_t *mutex = (pthread_mutex_t *) mutex;

你需要的是:

pthread_mutex_t *mutex = (pthread_mutex_t *) tex;