今私は立ち往生しています、ここに私がやろうとしていることがあります:
- 3 つのスレッドを作成します。
- これら 3 つのスレッドは、共有グローバル リソース (ベクトル) にアクセスします。
関数の特定のポイント (すべてのスレッドが呼び出す) で、スレッドをスリープ状態にする Sleep(time) 関数があり、関数は戻りません。これは、別のスレッド-スレッド2が関数にアクセスして使用し、スリープするまでグローバル変数を変更して、スレッド3が関数にアクセスできるようにする場所です...
グローバル変数にアクセスする「クリティカル セクション」関数のアクセス時間は特定されておらず、決して同じではありません。
最初に、メインで呼び出します
InitializeCriticalSection(&m_stCriticalSection);
私が試みたのは、この関数が呼び出されると、すぐに呼び出すことでした
EnterCriticalSection(&m_stCriticalSection);
次に、グローバル変数などを変更し、Sleep(time) を呼び出す前に
LeaveCriticalSection(&m_stCriticalSection);
これの問題は、他のスレッドが関数を離れても、関数にアクセスできないことです。他のスレッドが継続的に、または 5 秒ごとにクリティカル セクションにアクセスする方法はありますか? 私の実装はもっと良いでしょうか?
だからここに私が今持っているものがあります
void function() // all our threads will access this
{
EnterCriticalSection(&obj)
// manipulate global data
LeaveCriticalSection(&obj)
Sleep(long time) // another thread SHOULD NOW have access to this section!
return true;
}