Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Выполняется ли CreateMutex атомарно?
 
Возможна ли ошибка в случае параллельного
выполнения двух функий (т.е. наложения вызовов) CreateMutex? Т.е. выполняется ли вызов атомарно?
Более общая проблема выглядит так:
1. Существует класс, в котором есть поле дескриптора базы
данных и СТАТИЧЕСКОЕ поле дескриптора транзакции.
2. Нужно придумать механизм инициализации транзакции.
Транзакция инициализируется вызовом некоторой функции.
И как транзакцию потом закончить.

P.S. Работа с базой данных происходит
с помощью Interbase API
 
именованый мьюткс может быть токмо один (с таким именем) в системе. соответсвенно - да. тот createmutex который произойдет позже выдаст ашипку. если ошипка - то делаем опенмьютекс (кажись так) и ждем его освобождения. если и опенмьютекс отваливается (создавший его процесс отработал и закрыл), то снова пытаемся его создать через случайное время и так по циклу.
получаем типичную коллизионную картину с возможными кличами, когда процесс можен "непопадать" в моменты когда мьютекс существует\несуществует и соотвественно обламыватся, соотвественно это надо предусмотреть.
поэтому лучше если мьютекс создается "главным" процессом, а все остальные уже только открывают его.

(всё вышенаписанное может быть полным гоном, поскольку последний раз использовалось автором 4 года назад :-)
 
Спасибо за отклик
Но:
1. Из MSDN функция СreateMutex:
... If the named mutex object existed before the function call, the function returns a handle to the existing object ...
Т.е. если мутекс существует то функция просто выдает
дескриптор на существующий объект.
2. Чтобы дождаться освобождения мьютекса, необходимо
пользоваться WaitForSingleObject.
 
точно - я с ивентом кажись попутал. значит все проще :-)
я не про освобождение писал, а про удаление.
 
Вопрос тем не менее остается в силе :(
Страницы: 1
Читают тему