pthread_mutex_lock上的分段错误

时间:2009-06-02 14:02:28

标签: c++ pthreads segmentation-fault mutex

当我尝试

时,我遇到了分段错误
pthread_mutex_lock(&_mutex).

这真的很奇怪,我不确定是什么原因造成的。我用

在构造函数中初始化了_mutex
pthread_mutex_init(&_mutex,NULL).

我能做什么?

2 个答案:

答案 0 :(得分:5)

解决了它,我对此感到非常恼火。 我想发送一个Producer *作为Pthread运行函数的参数,所以我使用了&(* iter),其中iter是一个在生成器向量上运行的迭代器。

我没注意到它(正确地)是一个载体<制作人*>,这意味着我一直在发送生产者* *,它产生了未定义的结果。 grrrrr。显然,我没有注意到这一点,因为Pthreads是纯C语言,因此它使用void *作为接受任何类型参数的唯一方式。

答案 1 :(得分:2)

附加调试程序,找出完全导致segfault的原因。有些指针可能指向随机区域或未初始化区域。

同时运行 valgrind 的memcheck,看看会说些什么。

修改

在回复下面的评论时,pthread API声音的使用在某处不正确。我推荐O'Reilly的“PThread Programming”作为参考。这让我走了:)我猜这是因为API的使用正在将pthread_mutex_t结构内部的指针移动到危险的地方。如果正确使用API​​,则不应该这样做。