私は共有メモリ、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);
これは、リーダー/ライターロックの通常の説明です。 pthread_rwlock http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_rwlock_init.html – gastush
自分でロックプリミティブを実装しようとしないでください。通常の読み取り/書き込みロックを使用します(ただし、作者が飢えていないように振る舞いを確認してください)。 – ugoren
私はセマフォ(学校)を使う必要があります。 – Krab