ライター優先で、リーダー/ライター セマフォ ソリューションに障害を引き起こすことに興味があります。
ウィキペディアから引用した次のコード:
READER
P(mutex_3);
P(r);
P(mutex_1);
readcount := readcount + 1;
if readcount = 1 then P(w);
V(mutex_1);
V(r);
V(mutex_3);
reading is performed
P(mutex_1);
readcount := readcount - 1;
if readcount = 0 then V(w);
V(mutex_1);
...バイナリセマフォがあり、セマフォmutex_3
にアクセスしようとするスレッドの数を制限しr
て、ライターが優先されるようにします。
ライターが飢えることを期待して、そのミューテックスを削除しようとしましたが、成功しませんでした。私は Java でプログラムを作成しました。このプログラムでは、スレッドは一定時間 2 回待機します。読み取り/書き込み後と書き込み中です。1 つの書き込みプロセスと 8 つの読み取りプロセスを作成し、待機量をすべて 1 ミリ秒に設定しました。r
セマフォが常に 1 人のライターと多数のリーダーによって攻撃されている状況を作成してみました。これのどれも、私が期待した失敗を引き起こしませんでした。
私は何か間違ったことをしていますか?ライターの飢餓を引き起こすにはどうすればよいですか?