如何在 .NET 中实现 Oplock(机会锁定)?

How to implement Oplock (opportunistic locking) in .NET?

提问人:user16668952 提问时间:10/24/2021 最后编辑:Theodor Zouliasuser16668952 更新时间:10/24/2021 访问量:271

问:

我需要在 .NET 项目中实现 Oplock(机会锁定)。以下是我需要实现的方案:

  1. 应用程序 1 打开文件并且不允许写入(例如,使用 打开一个文件)。FileShare.Read
  2. 应用程序 2 请求写入文件(使用 打开文件)。FileAccess.Write
  3. 应用程序 1 收到请求写入的通知。它确认打破锁定并允许应用程序 2 写入文件。

类中具有完全异步 I/O 支持,并且 .NET 中还有 NativeOverlapped 结构。看起来 .NET 拥有 Oplock 所需的一切。但是,没有任何示例如何使用和 NativeOverlapped.EventHandle 字段来处理 oplock 中断,并且此结构没有任何参数。FileStreamNativeOverlapped

.NET 是否支持 Oplock?有没有 Oplock 的例子?

C# 异步 WinAPI IO 文件系统

评论

1赞 RbMm 10/24/2021
但这已经被 Windows 实现。您只需在 App1 中执行操作,并为此获得待处理状态。当 App2 写入文件时,将完成FSCTL_REQUEST_OPLOCKOPLOCK_LEVEL_CACHE_READREQUEST_OPLOCK_INPUT_FLAG_REQUESTFSCTL_REQUEST_OPLOCK
1赞 RbMm 10/24/2021
@Charlieface - 你错了。winapi 完全支持这个 ( ) 不需要任何循环FSCTL_REQUEST_OPLOCK
0赞 PMF 10/24/2021
.NET Framework 具有 和 实现了多个读取器的概念 - 一个写入器用于锁。这不是特定于文件访问的,但当然可用于控制对文件的访问。ReaderWriterLockReaderWriterLockSlim
0赞 RbMm 10/24/2021
@PMF这只是每个进程,与文件 oplock 没有什么共同点
2赞 RbMm 10/24/2021
@PMF - 我认为这里的主要概念是应用程序 2 对应用程序 1 一无所知,并且不使用它的任何通用同步

答: 暂无答案