我之前从未使用过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以确保主要还在范围内。我为何会发生这种情况感到茫然,并且可以使用一些帮助。谢谢!
答案 0 :(得分:2)
你有:
pthread_mutex_t *mutex = (pthread_mutex_t *) mutex;
你需要的是:
pthread_mutex_t *mutex = (pthread_mutex_t *) tex;