0

私の関数では、新しいスレッドを作成するためmain()に呼び出します。pthread_createテキストファイルの名前を渡すと、スレッドがテキストファイルを開き、行数をカウントして、返された数値にmain()整数を設定したところにその数値を返しますtotalCount +=

別のコードでテキストファイルの行数を数えたので、スレッド関数が正しく機能することを知っています。pthread_createループを使用して複数回呼び出すと、問題が発生します。1つのtotalCountファイルを数えることで得られるものは正確ですが、2つ以上のファイルを開くとtotalCountmain()入力が間違っています。

これを引き起こしている私のプログラムで何がうまくいかない可能性がありますか?スレッド機能に問題がありますか?私のpthread_join?私はこの質問がコードなしではかなり曖昧かもしれないことを知っていますが、この説明を与えられた考えはまったくありませんか?

4

2 に答える 2

0

コードなしはすべて推測です。しかし、確かtotalCount +=にスレッドセーフではありません。アトミックインターロック操作(例__sync_fetch_and_add)が必要であるか、ミューテックスで保護する必要があります。

于 2012-10-21T07:15:40.490 に答える
0

それを楽しむために暗闇の中で写真を撮る-このエラーが発生しているのを見ることができる唯一の方法は、内部の行カウンター(totalCountではなく、各ファイルの行数を追跡しているもの)がグローバルである場合です変数。各pthreadはおそらく同じ行カウント関数を呼び出しているため、他のスレッドが更新されると、各ファイルの行カウントが誤って増加します。totalCountしたがって、これは常に実際の行数よりも大きく、小さくはないことを予測します。

于 2012-10-22T01:35:28.937 に答える