2009-06-02 74 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​​的情況下。