2013-10-10 3 views
0

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

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

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

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

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

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

ответ

1

Может быть, вы можете использовать ReaderWriterLock где B и C (AcquireReaderLock) может прийти в качестве читателей в то время как А (AcquireWriterLock) идет в качестве писателя.

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

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

+0

Кажется, это хороший подход, я попробую. – dcastro

+0

Работает как шарм;) спасибо – dcastro