14.12.2019, 18:09 [+3 UTC]
в нашей команде: 4 068 чел. | участники онлайн: 7 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.79 (12.12.2019)
JS-v.1.35 | CSS-v.3.36

Общие новости:
28.04.2019, 09:13

Форум:
29.11.2019, 17:59

Последний вопрос:
14.12.2019, 17:21
Всего: 151266

Последний ответ:
14.12.2019, 17:58
Всего: 259573

Последняя рассылка:
14.12.2019, 14:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
06.06.2010, 21:13 »
Ильин Александр Владимирович
Спасибо за помощь [вопрос № 178910, ответ № 261894]

РАЗДЕЛ • .NET Framework / C# / Java

Создание программ на программной платформе .NET Framework и языках С# и Java.

[администратор рассылки: Коцюрбенко Алексей Владимирович (Модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 1530
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 705
solowey
Статус: Бакалавр
Рейтинг: 226

Перейти к консультации №:
 

Консультация онлайн # 72053
Раздел: • .NET Framework / C# / Java
Автор вопроса: Tek
Отправлена: 22.01.2007, 11:07
Поступило ответов: 1

Уважаемые эксперты, поясните пожалуйста как система (Windows 98, 2000) оперирует с НЕименованными мьютексами. В MSDN этот вопрос как-то скромно обойден вниманием, а у меня возникло подозрение, что если процессы основной программы и например динамически подгружаемых DLL создают несколько неименованных мьютексов, то они имеют шанс пересечься. Или это не возможно.
Создаются несколько мьютексов
CreateMutex((SECURITY_ATTRIBUTES *)NULL, FALSE, NULL);
В разных модулях и пара таких аналогично создается в двух DLL. Назначение у всех мьютексов различные.
Их захват идет везде с параметром INFINITE.
И вот судя по логам возможно(!!! может все-таки ошибся) функции ожидания разных неименованных мьютексов блокируют друг друга. Возможно ли такое? И в целом - для чего все-таки имеет смысл использовать неименованые мьюнексы.
Если есть ссылки на подробный разбор полетов по этой теме - буду премного благодарен.

Приложение:

Состояние: Консультация закрыта

Ответ # 138227 от Bob Johnson

Здравствуйте, Tek!
Нет, неименованные мутексы не могут "пересечься". если ты создаешь новый неименованный мутекс, то всегда создается еще один мутекс (ОС не пытается открыть существующий). это удобно использовать, если handle на мутекс нужен только в пределах одного процесса (для синхронизации отдельных его потоков), в то время как таких процессов может быть несколько одновременно. так что в твоем случае проблема скорее всего где-то еще.
потенциально опасное место применения объектов синхронизации демонстрирует следующий код (допустим, нам необходимо "получить" два мутекса):

в одном месте:
WaitForSingleObject (mutex1, INFINITE);
WaitForSingleObject (mutex2, INFINITE);

в другом месте:
WaitForSingleObject (mutex2, INFINITE);
WaitForSingleObject (mutex1, INFINITE);

тогда возможна ситуация, что один поток "получит" мутекс1 и будет ждать мутекс 2, в то время как второй поток "получит" мутекс2 и будет ждать мутекс1. вот тут будет deadlock.


Консультировал: Bob Johnson
Дата отправки: 22.01.2007, 11:33

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.24694 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.79 от 12.12.2019
Версия JS: 1.35 | Версия CSS: 3.36