Блокировка и синхронизация с использованием Mutex

Я создаю программу, которая будет запускать одну и ту же функцию в нескольких процессах и нескольких потоках, поэтому я создал функцию для достижения блокировки и синхронизации, которая

HANDLE WaitOnMutex(char* mt)
{
    HANDLE ghMutex=NULL; 
    DWORD lastError=-1;
    do
    {
        ghMutex = CreateMutex(NULL,TRUE,mt);
        lastError=  GetLastError();
        if(lastError!=ERROR_SUCCESS)
        {
            CloseHandle(ghMutex);
            Sleep(2000);
        }
    }
    while(lastError!=ERROR_SUCCESS);
    return ghMutex;
}

и я использую ее следующим образом

    HANDLE mtx=WaitOnMutex("Global\\DBG_MY_APP");
    //Do the work that needs sync
    CloseHandle(mtx)

Это правильный способ заблокировать эту функцию? или мне нужно использовать другой метод.

Примечание. Я использую «Глобальный», потому что некоторые части моего приложения являются winService, и мне нужно блокировать процессы, изолированные сеансом

Код работает в тестовой среде , но я не уверен, что делаю это правильно

0
задан CnativeFreak 30 March 2012 в 17:38
поделиться