3つのスレッドを実行するアプリケーションがあります。 3つのスレッドはすべて、グローバル変数の状態に基づいていくつかの操作を実行しています。 2つのスレッドが同じコードを実行し、1つのスレッドが別のコードを実行しています。マルチスレッド環境でのグローバルなデータ動作、C++
例:グローバル変数の
初期値がfalse
今gGlobalVarLock = false;
thread 1:
while(true == gGlobalVarLock)
{
/*wait for flag to become false*/
}
/*after the flag becomes false*/
{
mutex.lock();
gGlobalVarLock = true;
/*run some code*/
gGlobalVarLock = false;
mutex.unlock();
}
thread 2 and 3,
while(true == gGlobalVarLock)
{
/*wait for flag to become false*/
}
/*after the flag becomes false*/
{
mutex.lock();
gGlobalVarLock = true;
/*run some other code*/
gGlobalVarLock = false;
mutex.unlock();
}
で、gGlobalVarLockのINIT偽の値に起因するアプリケーションが起動した後、いずれかのスレッドが実行を開始し、ロックしなければなりません他のスレッドは実行されません。上記の実装では、gGlobalVarLockが実行スレッドによってロックされ、特定のスレッドのmutex.lock()のコードが実行されると、他のスレッドはそのスレッドにアクセスできなくなっています。ロックの下でグローバル変数をロックしているようです。しかし、私はどのように知りません。
私のコードは正常に動作しているようです。しかし、私は1つの疑いがあります。これらの2つのスレッドは同じコードを使用して実行されるため、Mutexはスレッド2と3のコードをロックします。しかし、他のコードを実行しているスレッド1の場合、ロックはどのように機能しますか?そのスレッドのmutex.lock()は、そのmutex.lock()の下でコードを実行しているときにgGlobalVarLockが他のスレッドに対してロックされていることを保証しますか?そのmutexは、gGlobalVarLockが他のスレッドを変更していないことを保証しますか?私の理解は、mutex.lock()は異なるスレッドが使用する共通コードをロックします。次に、異なるスレッドが異なるコードを実行している私の場合、グローバル変数はどのようにロックされていますか?
mutex.lock()はマルチスレッド環境でグローバル変数をロックしますか?
途中で「ミューテックス」のタイプを見たことがない/聞いたことがありません。 –
私のアプリケーションでこれらのスレッドを持っているグローバルミューテックス – Sushant