【发布时间】:2012-04-30 14:06:49
【问题描述】:
我有共享内存、x 个写入器、y 个读取器、一个父进程。写入者具有独占访问权限,因此一个写入者可以写入,而其他读取者和写入者必须等待。多个阅读器可以并行阅读。优先级是写入者,例如,如果 3 个读取器正在阅读,而一个写入器想要写入该共享内存,那么当这 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 pubs.opengroup.org/onlinepubs/009695399/functions/…
-
永远不要尝试自己实现锁定原语。只需使用普通的读/写锁(但要确保它们的行为不会让编写者挨饿)。
-
我需要使用信号量(学校)。
标签: c linux unix synchronization semaphore