-1
を更新していない私は、このC-プログラム書いた:その結果グローバル変数のpthread
int counter = 0;
void* increment()
{
int maxI = 10000;
int i;
for (i = 0; i < maxI; ++i) { counter++; }
}
int main()
{
pthread_t thread1_id;
pthread_t thread2_id;
pthread_create (&thread1_id,NULL,&increment,NULL);
pthread_create (&thread2_id,NULL,&increment,NULL);
pthread_join (thread1_id,NULL);
pthread_join (thread2_id,NULL);
printf("counter = %d\n",counter);
return 0;
}
を私が取得:counter = 10000
はなぜですか?私は2つのスレッドを使用しているので、何かもっと大きなものを期待していましたが、どうすれば修正できますか?
PS:競合状態があることを認識しています!
編集:volatile int counter
は、問題を解決するようだ:)
あなたのコードにはバグがあります。なぜそれはあなたが期待していないことに驚いていますか? –
揮発性のないコードは常に10000を出力しますが、それは私の混乱でした。 –