C ++ Thread Pool: как избежать спин-блокировки / ожидания ожидания? - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь избежать ожидания спин-блокировки / занятости из потоков моего пула потоков.

В настоящее время каждый поток выполняется в то время, как функция 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]' часть)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...