Безопасно ли использовать «throw» без выпуска Mutex в win32? - PullRequest
1 голос
/ 26 марта 2012

Прежде всего, я проверил это, и оно работало хорошо.Я хочу знать, правильно это или нет.

funcA() {  
    DWORD res = WaitForSingleObject(mutex, INFINITE);
    if (aaa != bbb) throw "aaa";

    ReleaseMutex(mutex);
}

WaitForSingleObject всегда возвращает «0», а не «WAIT_ABANDONED» или любые другие коды ошибок.Я просто не могу найти документацию, описывающую Mutex, которая будет выпущена на "throw".

Спасибо

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Это не произойдет, если не вызывать release неявно в деструкторе или блоке catch.Вы показываете весь код, необходимый для его описания?

1 голос
/ 26 марта 2012

Нет, мьютекс не будет освобожден при броске.

Однако вы можете создать свой собственный класс Lock, который блокирует мьютекс в конструкторе и освобождает его в своем деструкторе. Затем, если вы используете в своей функции объект Lock (используя стек памяти, а не кучу), вы можете убедиться, что деструктор для этого объекта будет вызван и мьютекс будет освобожден.

Это именно то, что класс CSingleLock делает в MFC.

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