Я пытаюсь избежать ожидания спин-блокировки / занятости из потоков моего пула потоков.
В настоящее время каждый поток выполняется в то время, как функция l oop, которая неоднократно вызывает try_lock () для получения mutex.
void ThreadFunction()
{
while (true)
{
if (!s_pMutexJoin->try_lock())
continue;
bool bJoin = s_bJoin;
s_pMutexJoin->unlock();
if (bJoin)
break;
...
}
}
* Помимо использования std :: atomi c вместо использования mutex в секции кода из try_lock () для unlock (),
Я придумал идею используя WaitForSingleObject ().
Не проверенный код ниже приведен ниже.
void ThreadFunction(const long _lThreadIndex)
{
while (true)
{
if (WaitForSingleObject(s_ppThreadEvents[_lThreadIndex], INFINITE) == WAIT_OBJECT_0)
{
...
}
}
}
Это подходящий подход?
PS
Я хотел бы спросить наверняка, что блокировка мьютекса не нужна в случае чтения? ('s_ppThreadEvents [_lThreadIndex]' часть)