Всем привет! Можно ли использовать Critical section при синхрониззации потоков из РАЗНЫХ ПРОЦЕССОВ ? Функции EnterCriticalSection и LeaveCriticalSection в качестве параметров требуют указатель на структуру CRITICAL_SECTION. А использование указателя (не хэндла) подразумевает их использование в одном адресном пространстве (и значит процессе) А если я создам файл-маппинг (CreateFileMapping + MapViewOfFile) и помещу туда структуру CRITICAL_SECTION ? Ведь тогда она станет доступной всем процессам и тогда можно будет синхронизировать потоки из разных процессов. Я прав ? Нет ли здесь граблей под подводными камнями ? Заранее спасибо. ЗЫ или таки проще использовать мутехи и не заморачиваццо с файл-маппингом ?
Тоже приходила такая идея. Похоже, что в МСДН такую возможность просто не учли - ведь действительно, это не объект ядра, и в каждом процессе достаточно будет иметь промаппированную область с критической секцией.
Критическая секция сама по себе - не объект ядра, но она использует объект ядра (семафор), если в EnterCriticalSection приходится ждать. Так что между разными процессами это не пройдёт (хэндл семафора, созданный в одном процессе, невалиден для другого), даже если структура лежит в разделяемой памяти. Added: опоздал немного
Я тоже хотел сделать такое в шаред мемори Красиво же Эта секция сработает только в том случае если хендл ее мутекса совпадет по значению в разных процессах Сделать это можно так: инициализировать сеуцию в одном процессе, потом во втором прочитать величину хендла и с помощью создания пустышек добиться ее же в DuplicateHandle Теоретически это должно работать, практического смысла в этом я не увидел и пробовать не стал
А если второй процесс создаётся из первого, то можно перед его созданием сделать хэндл семафора наследуемым...