Это довольно необычная модель для защиты ресурсов от неправильного одновременного доступа. Сначала я рассмотрю, нельзя ли преобразовать ваш сценарий использования в эквивалентный сценарий, в котором вы можете использовать простые блокировки.Если бы вы могли предоставить более подробную информацию о том, зачем вам нужна такая схема блокировки, сообщество может предложить другие идеи.
Чтобы ответить на ваш конкретный вопрос, ничего в .NET или даже в Win32 напрямуюподдерживает эту модель блокировки, , однако вы можете создать ее из других примитивов. Я бы посмотрел на использование пары ReaderWriterLockSlim
экземпляров для защиты каждого ресурса.Когда потоки входят в сегмент A, вы получаете блокировку чтения на A и блокировку записи B ... и наоборот для потоков, входящих в сегмент B.Это позволило бы выполнять несколько потоков в каждом сегменте, но не одновременно .
РЕДАКТИРОВАТЬ : Учитывая ваш ответ в комментариях к вашему вопросу, я более убежден, что вам нужно взглянуть на использование модели блокировки Reader / Writer. What you 'поиск - это способ защитить ресурс, так что когда «писатели» выполняют работу (сериализацию словаря), в них не могут войти ни читатели, ни другие писатели, а когда «читатели» выполняют работу, они не блокируют друг друга, а блокируют все остальные.писатели.Это классический случай для блокировки чтения / записи.
РЕДАКТИРОВАТЬ 2 : Теперь, когда у меня есть больше времени, я думаю, что стоит остановиться на одном моменте.Способ думать о блокировках заключается в том, что они защищают ресурсы данных (память, файлы и т. Д.), А не области кода.Тот факт, что нам нужно определить критические разделы кода, в которые может войти только один поток за раз, - это деталь реализации, которую не следует путать с тем, как используются общие ресурсы (и должны быть защищены).В вашем вопросе основное внимание уделено тому, как контролировать, какие потоки могут входить, какой раздел кода отклоняется от реальной проблемы: какие ресурсы данных вы пытаетесь защитить от каких изменений.Если вы посмотрите на проблему с этой точки зрения, она прояснит, какие парадигмы реализации имеют смысл.
Вот несколько полезных ресурсов по моделям блокировки чтения / записи:
http://msdn.microsoft.com/en-us/magazine/cc163599.aspx
http://msdn.microsoft.com/en-us/library/bz6sth95.aspx
http://blogs.msdn.com/b/vancem/archive/2006/03/29/564854.aspx