Не удаляется мутекс

131
31 января 2021, 14:10

Создается мутекс HANDLE hHande = CreateMutex(0, 0, "mut_name");

После чего OpenMutex(MUTEX_ALL_ACCESS, 0, "mut_name") начинает возвращать указатель на него.

Каким образом можно удалить созданный мутекс, чтобы OpenMutex перестал возвращать указатель на него? CloseHandle(hHande) и ReleaseMutex(hHande) не помогают.

Answer 1

CreateMutex "открывает" свежесозданный mutex. OpenMutex тоже "открывает" существующий mutex.

Если вы хотите, чтобы mutex был уничтожен, вам надо "закрыть" через CloseHandle все "открытия". То есть вызовы CreateMutex и OpenMutex вкупе требуют два последующих вызова CloseHandle, чтобы mutex уничтожился

HANDLE hHandle = CreateMutex(0, 0, "mut_name");
// Открытие. Счетчик открытий: 1
HANDLE h = OpenMutex(MUTEX_ALL_ACCESS, 0, "mut_name");
// Открытие. Счетчик открытий: 2
CloseHandle(h);
// Закрытие. Счетчик открытий: 1. Mutex все еще существует
CloseHandle(hHandle);
// Закрытие. Счетчик открытий: 0. Mutex уничтожен
h = OpenMutex(MUTEX_ALL_ACCESS, 0, "mut_name");
// Получаем NULL
READ ALSO
Как реализовать многопоточность в Qt?

Как реализовать многопоточность в Qt?

Суть проблемы надо реализовать чтобы фоном работали одни функции но можно не прерываю их выполнения работать с другой часть кодаДля этого...

103
XERCES: Warning'и при компиляции (LNK4217, LNK4049) [закрыт]

XERCES: Warning'и при компиляции (LNK4217, LNK4049) [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

111
SDL_ttf текст не выводится в opengl

SDL_ttf текст не выводится в opengl

Вот SDL_ttf функция:

322
Почему функции cos(), sin(), atant2() преобразуют long double в double?

Почему функции cos(), sin(), atant2() преобразуют long double в double?

Пишу проект, в котором необходима большая точность вычислений угла, а так же cos и sinОбнаружил, что значения, передаваемые мной в приведённые...

100