2010-05-20 4 views
2

Допустим, у меня есть система чтения-записи, в которой одновременно работают читатель и писатель. «a» и «b» - две общие переменные, которые связаны друг с другом, поэтому их модификация должна быть атомарной.Как программировать критический раздел для систем чтения-записи?

Система читатель-автор может быть следующих типов:

  1. р-р
  2. WW
  3. RW
  4. г-WW
  5. р-р-ш
  6. р-р-WW

, где
[г: один читатель
р-р: множественный читатель
ж: одиночный автор
WW: несколько писателя]

Теперь мы можем иметь метод считывания для считывания и способ записи для писателя следующие , Я написал их тип системы мудрый.

  1. р-р

    read_method 
    { read a; read b; } 
    
  2. WW

    write_method 
    { lock(m); write a; write b; unlock(m); } 
    
  3. г-ш

  4. г-WW
  5. р-р-ш
  6. р-р-WW

    read_method 
    { lock(m); read a; read b; unlock(m); } 
    
    write_method 
    { lock(m); write a; write b; unlock(m); } 
    

Для множественной системы считывания, общий доступ к переменным, не нужно быть атомарным.

Для системы с несколькими записывающими системами общий доступ к переменной должен быть атомарным, поэтому заблокирован с помощью «m».

Но для системных типов от 3 до 6 мой метод read_method и write_method правильный? Как я могу улучшить?

С уважением,
Шринивас Найяк

+0

Это домашнее задание/упражнение? Замки RW немного сложны, но в большинстве сред есть встроенные реализации, которые вы должны использовать. Но предлагая вам позвонить в библиотеку, это не поможет, если вы выполняете упражнение. –

+0

Это не домашнее задание. В большинстве книг обсуждается один или два типа системы. Я хотел иметь коллекцию, где для каждого типа системы мы можем понять, как это работает в теории. – 2010-05-20 08:50:04

ответ

0

Если вы хотите использовать Java, вы можете попробовать ReentrantReadWriteLock.

Вы можете найти несколько руководств по его использованию, например. here.

0

Если вы хотите использовать .NET, вы можете попробовать ReaderWriterLockSlim. Я считаю, что он дает вам точные функции, которые вам нужны. Вы также можете прочитать о том, как они реализовали его, чтобы узнать, как реализовать такие блокировки самостоятельно.