Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Мьютекс на процесс - есть такое ? / 7 сообщений из 7, страница 1 из 1
23.06.2015, 08:43
    #38990288
qwe2015
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мьютекс на процесс - есть такое ?
Есть клиент и сервер - разные приложения, которые между собой взаимодействуют. Для идентификации того, что сервер "живой" использую мьютекс. Проблема в том, что сервер может создаться в одном потоке, а работа с ним может происходить в других потоках. Соответственно, если поток-создатель сервера завершается, то мьютекс снимается и клиенты думают, что сервер умер. Есть что-то подобное мьютексу, но чтобы существовало в рамках всего процесса и не снималось при завершении потока, в котором он был создан ?
...
Рейтинг: 0 / 0
23.06.2015, 09:01
    #38990299
qwe2015
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мьютекс на процесс - есть такое ?
Или, думаю, запустить в сервере отдельный поток, в котором и создать этот мьюткс и чтобы этот поток постоянно висел всё время, пока работает сервер.
...
Рейтинг: 0 / 0
23.06.2015, 09:04
    #38990301
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мьютекс на процесс - есть такое ?
Джеффри Рихтер. Windows для профессионалов. Создание эффективных Win32-пpилoжeний с учетом специфики 64-разрядной версии Windows:

Теперь, когда Вы научились именовать объекты, рассмотрим, как разделять их между процессами по именам. Допустим, после запуска процесса А вызывается функция:

HANDLE hMutexPronessA = CreateMutex(NULL, FALSE, "JeffMutex");

Этот вызов заставляет систему создать новенький, как с иголочки, объект ядра "мъютекс" и присвоить ему имя JeffMutex Заметьте, что описатель hMutexProcessA в процессе А не является наследуемым, — он и не должен быть таковым при простом именовании объектов.

Спустя какое-то время некий процесс порождает процесс В. Необязательно, что-бы последний был дочерним от процесса А; он может быть порожден Explorer или любым другим приложением. (В этом, кстати, и состоит преимущество механизма именования объектов перед наследованием.) Когда процесс В приступает к работе,
исполняется код:

HANDLE hMutexProcessB = CreateMutex(NULL, FALSE, "JeffMutex");

При этом вызове система сначала проверяет, не существует ли уже объект ядра с таким именем. Если да, то ядро проверяет тип этого объекта. Поскольку мы пытаемся создать мьютекс и его имя тоже JeffMutex, система проверяет права доступа вызывающего процесса к этому объекту. Если у него есть все права, в таблице описателей, принадлежащей процессу В, создается новая запись, указывающая на существующий объект ядра. Если же вызывающий процесс не имеет полных прав на доступ к объекту или если типы двух объектов с одинаковыми именами не совпадают, вызов CreateMutex заканчивается неудачно и возвращается NULL.

Однако, хотя процесс В успешно вызвал CreateMutex, новый объект-мьютекс он не создал. Вместо этого он получил свой описатель существующего объекта-мьютекса. Счетчик объекта, конечно же, увеличился на 1, и теперь этот объект не разрушится, пока его описатели не закроют оба процесса — А и В. Заметьте, что значения описателей объекта в обоих процессах скорее всего разные, но так и должно быть, каждый процесс будет оперировать с данным объектом ядра, используя свой описатель.

...
Рейтинг: 0 / 0
23.06.2015, 11:29
    #38990462
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мьютекс на процесс - есть такое ?
qwe2015,

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

в общем, что тебе нужно, совсем не ясно, что ты просишь, очень легко делается с мьютексом.

да, ты не сказал - Win32?
...
Рейтинг: 0 / 0
23.06.2015, 12:13
    #38990532
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мьютекс на процесс - есть такое ?
qwe2015, почитай на тему что такое "процесс" и "поток" в Windows. Может часть вопросов сами отпадут.
...
Рейтинг: 0 / 0
23.06.2015, 12:25
    #38990546
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мьютекс на процесс - есть такое ?
qwe2015, ты бы простой пример кода привел как у тебя мьютекс используется.

Есть подозрение что ты в каком-то потоке блокируешь мьютекс, запускаешь еще один поток (сервер), а затем исходный поток завершается и мьютекс автоматом разблокируется. Если так - блокируй его в потоке сервера или замени мьютекс на event.
...
Рейтинг: 0 / 0
24.06.2015, 10:58
    #38991401
bdm77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мьютекс на процесс - есть такое ?
qwe2015Или, думаю, запустить в сервере отдельный поток, в котором и создать этот мьюткс и чтобы этот поток постоянно висел всё время, пока работает сервер.

Так и работают сервера . Бежит процесс и слушает соккет , получает из соккета (от клиента ) сообщение,
обработал и дальше слушает соккет .
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Мьютекс на процесс - есть такое ? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]