0

異なるスレッドでデータの一部を読み取り、その中のパターンを見つけるプログラムを書いています。

しかし、その前に (問題は以下のコードで発生します)、スレッドが適切にキャンセルされるかどうかを確認したかっただけです。それが私が立ち往生しているところです。エラーが表示されるまでに時間がかかりますが、基本的にプログラムを開始した後 (40 回の場合もあります)、メイン スレッドの while ループでハングします。

while (alive_threads) { //never ends, because alive_threads==1, but pthread_cleanup_pop should make sure that all canceling threads reduces counter and as a result reduce it to 0
 usleep(1000);
}

... 最後のスレッドがキャンセルされるのを待っています。

コードはこちら: http://pastebin.com/VqRrhXPD

私が読んでいるファイルのコンテンツも提供しました。

オープニング:

./a.out 20 test.txt 40 clean

20 -number of threads

40 -portion of data
4

1 に答える 1

3

alive_threadsメモリ同期なしでグローバル変数を変更しています。これは未定義の動作を引き起こします。ほとんどの場合、減少分の一部が失われます。

于 2012-06-04T02:30:23.417 に答える