c - 同步访问共享内存

标签 c linux unix synchronization semaphore

我有共享内存,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);

最佳答案

您需要一个 Pthreads 读/写锁 - 有一些背景 here关于 Linux NPTL 上的 writer starvation。

关于c - 同步访问共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10385070/

相关文章:

c++ - 为什么 C++ 中的字符串通常以 '\0' 结尾?

c - 向结构数组添加行,类型 char* 和 char 不匹配

python-3.x -/usr/bin/python3 和/bin/python3 有什么区别

linux - 带有 if not 条件的 Bash 循环

unix - 使用 SCP 将文件从 Windows 桌面移动到 vmware 上的 hadoop 沙箱

c - libc 函数 isatty() 是如何工作的?

CreateFile(ComX...) 错误 C2664 : 'CreateFileW' :

我可以在没有完整签名的情况下声明 "opaque"函数指针类型吗?

linux - 在 fstab Ubuntu 中挂载时出错

c - 互斥锁死锁(pthread_mutex)