たとえば、リーダーとライターが同時に実行されるリーダー/ライター システムがあるとします。'a' と 'b' は 2 つの共有変数であり、互いに関連しているため、それらの変更はアトミック操作である必要があります。
リーダー/ライター システムには、次の種類があります。
- rr
- ww
- 右
- r-ww
- rr-w
- うーんww
[ r : シングル リーダーrr
: マルチ リーダー
w : シングル ライター
ww: マルチ ライター ]
さて、次のように、リーダー用の読み取りメソッドとライター用の書き込みメソッドを使用できます。私はそれらをシステムタイプごとに書きました。
rr
read_method { read a; read b; }
ww
write_method { lock(m); write a; write b; unlock(m); }
右
- r-ww
- rr-w
うーん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 は正しいですか? どうすれば改善できますか?
敬具、
スリニバス・ナヤク