私は共有メモリ、x ライター、y リーダー、1 つの親プロセスを持っています。ライターには排他的なアクセス権があるため、1 人のライターが書き込みを行うことができ、他のリーダーとライターは待機する必要があります。複数のリーダーが並行して読み取ることができます。優先順位はライターにあるため、たとえば、3 つのリーダーが読み取りを行っていて、1 つのライターがその共有メモリに書き込みたい場合、それら 3 つのリーダーがジョブを終了すると、それ以上リーダーは読み取ることができず、ライターは書き込むことができなくなります。リーダーは並列に読み取ることができるため、セマフォを介して実装する方法がわかりません。次のコードは機能しません。すべてのリーダーがそのセマフォで待機するためです。
//reader
if(isWriterActive())
{
sem_wait(semReaderStop);
}
//writer
sem_wait(semReaderStop());
.
.
sem_post(semReaderStop());
ブロッキングではないので、このようなものは良くないと思います。
//readers doJob
if(isWriterActive())
{
return E_WRITER_ACTIVE;
}
while(doJob()==E_WRITER_ACTIVE);