でトラブルを起こすことがありましたpthread_exit()
。pthread_exit()
私はそのような方法で使用する方法がないことを知っています
pthread_exit(&some_local_variable);
次のように常に pthread_exit() を使用する必要があります。
pthread_exit("Thread Exit Message or something necessary information");
テスト目的で簡単なプログラムをコーディングしたことがあります。2 つの整数の足し算、引き算、掛け算、割り算の 4 つのスレッド関数をそれぞれ作成しました。次に、これらの操作を 4 つの異なるスレッドで実行しながら、操作の結果をpthread_exit()
. つまり、次のようなものです。
pthread_exit(&add_result);
pthread_exit()
CentOS 6 でコードを実行すると、そのようには使用できないため、目的の結果 (つまり、すべてのスレッドからのガベージ値) が得られました。しかし、私は混乱しました。初めて、Ubuntu 11.10 でそのコードを実行し、3 つのスレッドから 3 つの完全に正しい結果 (操作の正しい結果) と 1 つのスレッドからガベージ値を得たからです。なぜ 3 つのスレッドが正しい操作結果を返すのか、これは私を混乱させました。
さらに、これらのスレッドには異なるスリープ時間を使用しました。スリープ時間が最も短いスレッドがガベージ値を与えることがわかりました。
gcc はこれら両方のオペレーティング システムのコンパイラであるため、一方のシステムにこのようなバグがあるのはなぜですか? 私のような初心者のプログラマーは混乱します。バグでない場合、なぜこれが起こっているのか説明してもらえますか?