【发布时间】:2011-12-05 13:04:44
【问题描述】:
我正在使用以下链接中的 C# 代码来实现 Ram-disk 项目。
总而言之,上述代码使用简单的树形结构来存储目录、子目录和文件。根是一个MemoryFolder 对象,它存储零个或多个“MemoryFolder”对象和/或MemoryFile 对象。每个MemoryFolder 对象依次存储零个或多个MemoryFolder 对象和/或MemoryFile 对象等等,直到无限深度。
但是,代码不是线程安全的。实现线程安全的最优雅的方式是什么?此外,如何通过使用适当的锁定策略来强制执行以下典型文件系统的多线程要求的非详尽列表?
在同一个文件夹下同时创建两个不同的文件夹(每个由不同的线程) 如果线程安全,父文件夹可以同时出现 实施允许它。否则,一些锁定策略应该是 实现只允许顺序创建。
没有文件夹的直接或间接父文件夹 包含特定文件(当前由另一个文件读取) 线程)一直传播到根文件夹可以移动 或被另一个线程删除,直到
ReadFile线程完成其 执行。对于每个唯一文件,允许同时访问多个
ReadFile线程,但限制访问单个WriteFile线程。如果两个独立的
ReadFile线程(几乎同时触发), 每个来自不同应用程序的应用程序都尝试创建一个文件夹 同名(假设该文件夹不存在 在两个线程都被触发之前),第一个进入 Ram-Disk 总是成功,而第二个总是失败。其他 换句话说,线程执行的顺序是确定的。总磁盘空间计算方法
GetDiskFreeSpace运行 在一个单独的线程下不应该完成它的执行,直到所有WriteFile已经在进行中的线程完成了它的执行。所有未开始执行的后续WriteFile线程都将被阻塞,直到GetDiskFreeSpace线程完成其执行。
【问题讨论】:
标签: c# .net windows filesystems dokan