7

やろうとするとセグメンテーション違反が発生します

pthread_mutex_lock(&_mutex).

これは本当に奇妙なことです。何が原因なのかわかりません。コンストラクターで_mutexを初期化しました

pthread_mutex_init(&_mutex,NULL).

私にできることは何ですか?

4

2 に答える 2

6

それを解決しました、そして私はこれに非常に腹を立てています。Pthread が実行する関数への引数として Producer* を送信したかったので、&(*iter) を使用しました。

(当然のことながら) ベクトル < Producer* > であることにほとんど気づきませんでした。これは、未定義の結果を生成する Producer* * を送信していたことを意味します。うーん。明らかに、私はこれに気づきませんでした。なぜなら、Pthreads は純粋な C であり、あらゆるタイプの引数を受け入れる唯一の方法として void* を使用しているためです。

于 2009-06-02T20:42:23.913 に答える
3

デバッガーを接続して、セグメンテーション違反の原因を正確に調べます。一部のポインタがランダム性または初期化されていない領域を指している可能性があります。

また、valgrindのmemcheckを実行して、その内容を確認してください。

編集

以下のコメントに応えて、pthreadAPIの使用法はどこかで正しくないように聞こえます。参考として、O'Reillyの「PThreadProgramming」をお勧めします。それが私を動かした理由です:)APIの使用により、pthread_mutex_t構造体の内部のポインターが危険な場所に移動しているため、これを推測しました。これは、APIを正しく使用した場合には発生しないはずです。

于 2009-06-02T14:05:29.227 に答える