2

たとえば、リーダーとライターが同時に実行されるリーダー/ライター システムがあるとします。'a' と 'b' は 2 つの共有変数であり、互いに関連しているため、それらの変更はアトミック操作である必要があります。

リーダー/ライター システムには、次の種類があります。

  1. rr
  2. ww
  3. r-ww
  4. rr-w
  5. うーんww


[ r : シングル リーダーrr
: マルチ リーダー
w : シングル ライター
ww: マルチ ライター ]

さて、次のように、リーダー用の読み取りメソッドとライター用の書き込みメソッドを使用できます。私はそれらをシステムタイプごとに書きました。

  1. rr

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

    write_method
    { lock(m); write a; write b; unlock(m); }
    
  3. r-ww
  4. rr-w
  5. うーん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 は正しいですか? どうすれば改善できますか?

敬具、
スリニバス・ナヤク

4

2 に答える 2

0

Javaを使用したい場合は、ReentrantReadWriteLockを試すことができます。

その使用法に関するいくつかのチュートリアルを見つけることができます、例えばここに

于 2010-05-20T06:58:27.360 に答える
0

.NET を使用する場合は、ReaderWriterLockSlimを試すことができます。必要な機能を正確に提供すると思います。また、そのようなロックを自分で実装する方法を学ぶために、彼らがそれを実装した方法について読むこともできます.

于 2010-05-20T06:51:02.970 に答える