6

私はいくつかの C コードに取り組んでおり、ミューテックスのロックに問題があります。コードは関数の呼び出しを行い、この関数はミューテックスをロックして、ファイルポインターが上書きされないようにします。これは、おそらく呼び出される関数の約10〜20回の個別の呼び出しで、いくつかのインスタンスで正常に機能しますが、次の呼び出しで、pthread_mutex_lock は結果 22 を返します。次に、この結果を strerror(); に入れました。無効な引数が返されました。

無効な引数とはどういう意味ですか。提供できるヘルプに感謝します。

4

2 に答える 2

8

22はENVALinvlalid引数を意味するエラーコードです。ミューテックスを初期化したことを確認してください。ある時点で、どこかでそれを統一した場合もあります。

また、manpthread_mutex_lockは次のように述べています。

EINVAL

ミューテックスは、値PTHREAD_PRIO_PROTECTを持つプロトコル属性を使用して作成され、呼び出し元のスレッドの優先度は、ミューテックスの現在の優先度上限よりも高くなっています。

これはよくわかりませんが、スレッドの優先度を変更する必要があることを意味している可能性があります。私はわかりません。多分誰か他の人がそれに光を当てることができます。

于 2012-10-08T13:02:45.653 に答える
4

プログラムのどこかにスレッドの問題またはワイルドポイントがあるようです。ミューテックス ポインターの値を出力してみてください。単純にミューテックスをロックし、ログ ファイルに時間とロックが成功したことを出力し、ミューテックスのロックを解除する別のスレッドを作成してみてください。問題はあなたが探している場所ではないと思います。

また、他の人がここで言ったように、あなたの最善の策は、問題を示す非常に小さなテスト プログラムを作成し、ここに投稿することです。その小さなプログラムでエラーを実証できない可能性があります。次に、エラーが返されるまで、すべての元のコードを小さなプログラムにゆっくりと追加します。返された場合は、問題の原因がわかりました。戻らない場合は終了です。

于 2012-10-08T12:43:05.407 に答える