Критические разделы - контроль доступа

У меня есть 1 критический раздел (раздел A) и два других раздела (B и C). Я пытаюсь достичь этих двух целей:

  1. Если поток попадает в раздел A, я хочу убедиться, что разделы B и C не могут быть выполнены любым другим потоком (на время раздела A).

  2. Однако, если секция A не выполняется, секции B и C могут выполняться любым количеством потоков.

Очевидно, используя lock на всех трех разделах не помогает: это отвечало бы первому требованию, но не второму. B и C не смогут работать одновременно при нормальных обстоятельствах.

Как мне это сделать?

(Извиняюсь за смутное название)

1 ответ

Решение

Возможно, вы можете использовать ReaderWriterLock, где B и C (AcquireReaderLock) могут входить как читатели, в то время как A (AcquireWriterLock) входит как писатель.

http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlock.aspx

Это именно то, для чего предназначен этот класс.

Другие вопросы по тегам