我得到一個分段錯誤,當我嘗試做分段錯誤的pthread_mutex_lock上
pthread_mutex_lock(&_mutex).
這是非常奇怪的,我不知道什麼可能導致它。我已經在構造函數中初始化_mutex與
pthread_mutex_init(&_mutex,NULL).
什麼我可以做?
我得到一個分段錯誤,當我嘗試做分段錯誤的pthread_mutex_lock上
pthread_mutex_lock(&_mutex).
這是非常奇怪的,我不知道什麼可能導致它。我已經在構造函數中初始化_mutex與
pthread_mutex_init(&_mutex,NULL).
什麼我可以做?
解決了它,我對此非常惱火。 我想發送一個Producer *作爲Pthread運行函數的參數,所以我使用了&(* iter),其中iter是一個在生產者向量上運行的迭代器。
我沒有注意到它是(正確)一個矢量< Producer *>,這意味着我一直在發送Producer * *,它產生了未定義的結果。 grrrrr。顯然,我沒有注意到這一點,因爲Pthreads是純C語言,因此它使用void *,因爲它只是接受任何類型參數的方法。
附加一個調試器並找出究竟是什麼是導致段錯誤。有些指針可能指向隨機或未初始化的區域。
也運行valgrind的memcheck,看看有什麼說的。
編輯
在回答下面的評論中,並行線程API的使用不正確的聲音的地方。我推薦O'Reilly的「PThread Programming」作爲參考。這是讓我去了:)我猜對了,因爲API的用法是在pthread_mutex_t結構的內部移動一個指向危險的指針。這不應該發生在正確使用API的情況下。
請發送更多的代碼。這個問題很可能是完全不同的,只是在你的pthread_mutex_lock調用中出現問題。 – lothar 2009-06-02 15:32:24
這是可以幫助您提供的信息。你將得到的只不過是受過教育的猜測。 – 2009-06-02 20:15:13
我希望得到一個有根據的猜測,就是「你需要在main()中調用一個全局初始化函數」。原來,這只是一些愚蠢的事情。那麼,塞爾錯誤,你會期待什麼? – Nefzen 2009-06-02 21:01:29