スレッドは同じリソースを使用する必要があり、という特定されていない動作を呼び出すことがあります。例えば、加算はアトミック演算ではないため、この問題を引き起こす可能性があります。だから、ある種ののバリアが必要です。一つのスレッドだけがそのバリアを通過することができ、他のスレッドはそのスレッドが終了するのを待たなければなりません。終わる。
これは競合状態の一例であり、これにはMUTEX(相互排除)が使用されています。ミューテックスはどのように機能しますか?まず、メイン機能でミューテックスを初期化する必要があります。
pthread_mutex_init(&lock, NULL).
変数pthread_mutex_t lock;
はグローバルなので、すべてのスレッドがそれにアクセスすることができます。その後、1つのスレッドロックミューテックスます:
pthread_mutex_lock(&lock);
そして今は、次のスレッドが、私はちょうど書いたコード行に、この同じポイントになる、とはトラフにそれを渡すことができません。だから、他のすべてのスレッドがこのバリアで待機している - のコード行を、最初のスレッドロック解除ミューテックスまで:
pthread_mutex_unlock(&lock);
を次にOSからプロセッサ時間を取得したスレッドによっては、トラフのバリアと同じことを通過しますと、すべての上に繰り返されます再び。
ミューテックスは、理解することが非常に重要な概念です。セマフォについては、同じもの、スレッド同期のために使用されており、hereはこのトピックをカバーする優れた記事です。
質問を修正してください。何を試しましたか?どのような資料をお読みになりましたか?正確に何を理解していないのですか?あなたの宿題をする人がいるとは思わないでください –
[このSO Q&A](http://stackoverflow.com/questions/2065747/pthreads-mutex-vs-semaphore)をご覧ください – LPs
複数のスレッドで同時に実行される場合'return x;'の最後のアクセスがmutexによって保護されていないので、あなたのサンプルは、非アトミックな、 'x'への読み取り専用でないアクセスのため、未定義の動作を示します。 – EOF