2009-06-02 79 views
4

我得到一个分段错误,当我尝试做分段错误的pthread_mutex_lock上

pthread_mutex_lock(&_mutex). 

这是非常奇怪的,我不知道什么可能导致它。我已经在构造函数中初始化_mutex与

pthread_mutex_init(&_mutex,NULL). 

什么我可以做?

+1

请发送更多的代码。这个问题很可能是完全不同的,只是在你的pthread_mutex_lock调用中出现问题。 – lothar 2009-06-02 15:32:24

+0

这是可以帮助您提供的信息。你将得到的只不过是受过教育的猜测。 – 2009-06-02 20:15:13

+0

我希望得到一个有根据的猜测,就是“你需要在main()中调用一个全局初始化函数”。原来,这只是一些愚蠢的事情。那么,塞尔错误,你会期待什么? – Nefzen 2009-06-02 21:01:29

回答

5

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

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

2

附加一个调试器并找出究竟是什么是导致段错误。有些指针可能指向随机或未初始化的区域。

也运行valgrind的memcheck,看看有什么说的。

编辑

在回答下面的评论中,并行线程API的使用不正确的声音的地方。我推荐O'Reilly的“PThread Programming”作为参考。这是让我去了:)我猜对了,因为API的用法是在pthread_mutex_t结构的内部移动一个指向危险的指针。这不应该发生在正确使用API​​的情况下。