Как ждать на Mutex с OpenMP - PullRequest
       4

Как ждать на Mutex с OpenMP

1 голос
/ 17 марта 2011

У меня есть цикл for, который будет запускать процессы параллельно, каждый запущенный процесс вернет ответ, указывающий, что он готов.Я хочу дождаться ответа, и я прервусь, если будет достигнут определенный таймаут.

Среда разработки VS2008
Вот псевдокод:

void executeCommands(std::vector<Command*> commands)
{
    #pragma omp parallel for
    for (int i = 0; i < commands.size(); i++)
    {
        Command* cmd = commands[i];
        DWORD pid = ProcessLauncher::launchProcess(cmd->getWorkingDirectory(),  cmd->getCommandToExcecute(), cmd->params);

        //Should I wait for process to become ready?
        if (cmd->getWaitStatusTimeout() > 0)
        {
            ProcessStatusManager::getInstance().addListener(*this);

            //TODO: emit process launching signal

            //BEGINNING OF QUESTION
            //I don't how to do this part. 
            //I might use QT's QWaitCondition but if there is another solution in omp
            //I'd like to use it
            bool timedOut;
            SOMEHANDLE handle = Openmp::waitWithTimeout(cmd->getWaitStatusTimeout(), &timedOut);
            mWaitConditions[pid]) = handle;
            //END OF QUESTION

            if (timedOut)
            {
                ProcessStatusManager::getInstance().removeListener(*this);
                //TODO: kill process
                //TODO: emit fail signal
            }
            else
            {
                //TODO: emit process ready signal
            }
        }
        else
        {
            //TODO: emit process ready signal
        }
    }
}

void onProcessReady(DWORD sourceProcessPid)
{
    ProcessStatusManager::getInstance().removeListener(*this);
    SOMEHANDLE handle = mWaitConditions[sourceProcessPid];
    if (mWaitConditions[sourceProcessPid] != 0)
    {
        Openmp::wakeAll(handle);
    }
}

1 Ответ

3 голосов
/ 17 марта 2011

Как отмечалось в комментарии выше, Майкл Суесс представил документ о добавлении этой функциональности в OpenMP. Он является последним из нескольких людей, которые предложили добавить в OpenMP некоторую функцию ожидания. Языковой комитет OpenMP несколько раз поднимал этот вопрос. Каждый раз он был отклонен, потому что есть другие способы сделать эту функцию уже. Я не знаю Qt, но пока функции, которые он предоставляет, являются поточно-ориентированными, тогда вы сможете их использовать.

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