7

我尝试做时遇到分段错误

pthread_mutex_lock(&_mutex).

这真的很奇怪,我不确定是什么原因造成的。我已经在构造函数中初始化了 _mutex

pthread_mutex_init(&_mutex,NULL).

我能做什么?

4

2 回答 2

6

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

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

于 2009-06-02T20:42:23.913 回答
3

附加调试器并找出导致段错误的确切原因。某些指针可能只是指向随机性或未初始化区域。

还运行valgrind的 memcheck 并查看内容。

编辑

针对下面的评论,pthread API 的使用在某处听起来不正确。我推荐了 O'Reilly 的“PThread Programming”作为参考。这就是让我前进的原因:) 我猜到了这一点,因为 API 的使用正在将 pthread_mutex_t 结构内部的指针移动到危险的地方。正确使用 API 不会发生这种情况。

于 2009-06-02T14:05:29.227 回答