当我尝试
时,我遇到了分段错误pthread_mutex_lock(&_mutex).
这真的很奇怪,我不确定是什么原因造成的。我用
在构造函数中初始化了_mutexpthread_mutex_init(&_mutex,NULL).
我能做什么?
答案 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,则不应该这样做。