Предлагает ли Windows какой-либо мьютекс, который можно поместить в файл с отображением в памяти и использовать в нескольких процессах?
В идеале он должен быть полностью автономным, чтобы он мог выжить сам по себе в файле даже после перезагрузки.
Кроме того, не должно быть утечки ресурсов, если я просто удаляю файл вручную, пока не запущены никакие процессы.
Если возможно, решение должно также предлагать сопутствующую концепцию «условия», которая также должна представлять собой объект, который может находиться в отображенном файле совместно используемой памяти.
Короче говоря, мне нужно что-то похожее на мьютекс PTHREADS с атрибутом SHARED.
Насколько я понимаю, простое использование мьютекса PTHREADS невозможно, поскольку атрибут SHARED не поддерживается в порте Windows PTHREADS.
Для совместного использования объекта синхронизации присвойте ему имя и используйте одно и то же имя в каждом процессе при создании объекта.
Таким образом, следующие процессы синхронизации могут быть разделены между процессами:
Критические разделы не могут быть разделены, но быстрее.
Тестирование или ожидание этих объектов выполняется с помощью семейства функций ожидания, часто WaitForMultipleObjects.
Используйте файл в качестве своего собственного мьютекса: используйте LockFileEx
и пусть все согласятся заблокировать байт 0 файла, когда они захотят получить мьютекс.
Это невозможно. Сам объект мьютекса живет в пространстве ядра, чтобы защитить его от вмешательства пользовательского кода в его состояние. Полученный вами дескриптор действителен только для процесса, который его приобрел. Технически вы можете использовать DuplicateHandle () и поместить возвращенный дескриптор в mmf, но только если у вас есть дескриптор другого процесса, который обращается к разделу памяти. Это довольно хрупко.
Вот почему вы можете указать название для мьютекса в функции CreateMutex (). Другой процесс добирается до него, используя то же имя в вызове OpenMutex.