- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嘿,大家好,我正在考虑如何使一个文件由 n 个读取器和一个写入器读取,其中每个操作都有不同的偏移量和大小。出于这个动机,我希望:-
1) 最大并发数2) 防止读取器读取写入器正在写入该区域中任何偏移量的文件区域3)但是,只要写入器与读取器没有任何重叠,多个读取器就可以读取文件的重叠区域4)最后读者也不应该饿死作者
如何使用 n+1 信号量来实现这种情况。有没有我可以引用的示例解决方案。谢谢
这是我的伪代码:-
lock
lock lockarray[m+1]
lockentry = set Lock Entry[Item number]
writer code:
wait(mutex[item number]);
readcount[item number]--;
if read count[item number]==0
signal (wrt[item number]);
signal (mutex[item number])
}
lock
lock lockarray[m+1]
lockentry = set Lock Entry[Item number]
Reader code:
wait(mutex[item number]);
read count[item number]++;
if read count[item number]==1
wait (wrt[item number]);
wait(mutex[item number]);
signal mutex[item number];
最佳答案
如果您想对文件执行此操作,您可以定义一定的粒度并根据该粒度声明锁。例如,对于大文件,您可以使用 4k 的大小(系统上页面的大小),并表示每个读/写锁在文件上的粒度为 4k,锁的数量就是文件大小/4k。您可以使用所需的任意大小,当然,需要在更细粒度的锁定(更多内存来跟踪区域锁定)和实现最佳性能之间进行权衡。
你可以尝试类似的事情
#define MYGRANULARITY 4096
lock filelocks[file_size / MYGRANULARITY];
/* Code to do read or write */
int lock_idx = location_to_rw / MYGRANULARITY;
lock(filelocks[lock_idx]);
/* do work with it */
unlock(filelocks[lock_idx]);
要锁定粒度锁,您所要做的就是找到需要获取哪个锁并执行正常的 R/W 锁定行为。
关于c - 如何在 C 中使用 n+1 信号量防止读写器死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8033837/
我们希望能够为我们正在构建的 iOS 应用程序创建一个 IFC 阅读器,使我们能够渲染底层 BIM 生成的设计。我们发现了一个相当旧且不受支持的 C++ sdk here但这不是我们正在寻找的。 任何
void X() { lock(&m); while(x || y) wait( &farpar, &m); x ++; unlock(&m); // Do X stuff loc
如何实现 Reader Writer 问题,一次只允许一个 reader,并且只有在没有 writer 想要修改共享结构的情况下? Reader: wait(mutex)
我买了一个 USB RFID 读写器来开发考勤应用程序。除了设备,他们还提供了 VB 示例来读取/写入 RFID 标签。但我想用 Java 来做。有什么方法可以开始编程来读取/写入 RFID 标签。
我拿到了 RC-S380 NFC 读写器,但是在安装了 Sony 的驱动程序后,该设备在设备管理器中显示为“NFC 端口”而不是“感应设备”。 在我的应用程序中,ProximityDevice.Get
我是一名优秀的程序员,十分优秀!