Допустим, у меня есть система чтения-записи, в которой одновременно работают читатель и писатель. «a» и «b» - это две общие переменные, которые связаны друг с другом, поэтому их модификация должна быть атомарной операцией.
Система чтения-записи может быть следующих типов:
- р-р
- WW
- г-ж * * 1 010
- г-WW
- р-р-ж
- р-р-WW
, где
[r: один читатель
рр: множественный читатель
w: один писатель
ww: несколько писателей]
Теперь у нас может быть метод read для читателя и метод write для писателя следующим образом. Я написал их тип системы мудрый.
р-р
read_method
{ read a; read b; }
ш.
write_method
{ lock(m); write a; write b; unlock(m); }
- р-р-ж
р-р-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? Как я могу улучшить?
С уважением,
Сринивас Наяк