更新サイクルでメインスレッドからgetterを継続的に呼び出し、別のスレッドからsetterを呼び出すときに、ミューテックスを使用して変数をロックおよびロック解除します。セッターとゲッターのコードを以下に示しました
意味
bool _flag;
System::Mutex m_flag;
呼び出し
#define LOCK(MUTEX_VAR) MUTEX_VAR.Lock();
#define UNLOCK(MUTEX_VAR) MUTEX_VAR.Unlock();
void LoadingScreen::SetFlag(bool value)
{
LOCK(m_flag);
_flag = value;
UNLOCK(m_flag);
}
bool LoadingScreen::GetFlag()
{
LOCK(m_flag);
bool value = _flag;
UNLOCK(m_flag);
return value;
}
これは半分の時間でうまく機能しますが、SetFlagの呼び出し時に変数がロックされることがあるため、設定されないため、コードのフローが妨げられます。
誰かがこの問題を解決する方法を教えてもらえますか?
編集:
これは私が最終的に行った回避策です。これは一時的な解決策にすぎません。誰かがより良い答えを持っているなら、私に知らせてください。
bool _flag;
bool accessingFlag = false;
void LoadingScreen::SetFlag(bool value)
{
if(!accessingFlag)
{
_flag = value;
}
}
bool LoadingScreen::GetFlag()
{
accessingFlag = true;
bool value = _flag;
accessingFlag = false;
return value;
}