- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有多个服务于一组文件的 asp.net web 应用程序。定期地,在提供文件之前会更新文件,但如果文件正在使用,则无法更新文件。
我可以通过使用命名互斥体来解决这个问题,其中名称是文件路径(当然替换无效字符)。我在其他情况下使用过它,但你可以看到它是多么低效。一次只有一个进程能够提供该文件。
读取器/写入器锁将是完美的,但它们被设计为在单个进程中工作。另外,我必须为每个可能更新的文件创建一个读取器/写入器锁,而且有很多。
我真正需要的是一个可以像互斥锁一样命名的读/写锁。有这样的事情吗?或者可以使用现有的锁创建这样的东西吗?
最佳答案
可以使用互斥锁和信号量来模拟读/写锁。如果我每秒必须访问它数千次,我就不会这样做,但是每秒数十次甚至数百次,它应该可以正常工作。
此锁将允许 1 个写入者进行独占访问或 N 个(可能很大,但您必须定义它)读取者进行并发访问。
这是它的工作原理。我将以 10 个读者为例。
初始化一个命名的互斥体,最初是无信号的,以及一个有 10 个插槽的命名信号量:
Mutex m = new Mutex(false, "MyMutex");
Semaphore s = new Semaphore(10, 10, "MySemaphore");
// Lock access to the semaphore.
m.WaitOne();
// Wait for a semaphore slot.
s.WaitOne();
// Release mutex so others can access the semaphore.
m.ReleaseMutex();
s.Release();
// Lock access to the seamphore
m.WaitOne();
// Here we're waiting for the semaphore to get full,
// meaning that there aren't any more readers accessing.
// The only way to get the count is to call Release.
// So we wait, then immediately release.
// Release returns the previous count.
// Since we know that access to the semaphore is locked
// (i.e. nobody can get a slot), we know that when count
// goes to 9 (one less than the total possible), all the readers
// are done.
s.WaitOne();
int count = s.Release();
while (count != 9)
{
// sleep briefly so other processes get a chance.
// You might want to tweak this value. Sleep(1) might be okay.
Thread.Sleep(10);
s.WaitOne();
count = s.Release();
}
// At this point, there are no more readers.
m.ReleaseMutex();
关于.net - 是否有全局命名的读写器锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/640122/
我们希望能够为我们正在构建的 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
我是一名优秀的程序员,十分优秀!