【问题标题】:Concurrent reading/editing of file并发读取/编辑文件
【发布时间】:2012-10-18 11:28:45
【问题描述】:

我有一个平面文件数据库(一个 xml 文件)。我有一个读取和编辑这个数据库的客户端。我在一个目录中有许多客户端连接到的 xml 文件。如果一个客户端进行了编辑,则需要在所有客户端上进行更新。

我不能使用数据库,必须使用这种平面文件结构(即我不能一直运行管理服务器应用程序)

客户端运行 XP 和 .NET

这个问题的现代解决方案是什么?我有一段时间没有进行任何 XP 或 .NET 编码了,简单地使用文件锁会很容易吗?你甚至在 XP 上有单独的读/写锁吗?

编辑

客户端都在不同的机器上,数据库存储在网络共享上。

【问题讨论】:

    标签: .net concurrency io


    【解决方案1】:

    您可以使用System.Threading.Mutex 来处理对该文件的读取/编辑访问。在您正在处理或阅读此平面文件的班级中,您应该编写

    yourMutex.WaitOne();
    ReaderOrWrite();
    yourMutex.ReleaseMutex();
    

    你可以找到一个很好的示例代码here,它还可以处理没有创建互斥体的情况。

    Mutex 是一种信号量,用于处理对关键区域的多次访问,在您的示例中是 xml 文件,并提供防止关键部分并发执行的解决方案。

    【讨论】:

    • 我很抱歉,我觉得我没有提供足够的信息。请在 OP 中查看我的编辑。我认为互斥锁不会在这里工作,因为它们只在一台机器上持久存在? (反正这是我的印象)
    • 所以我想到的一种简单方法是在托管 xml 文件的机器上编写一个 Web 服务,并让该服务通过使用互斥锁或任何其他方便的方法来处理对文件的访问给你。
    • 不能这样做 - 无权访问任何 24/7 运行的机器。
    • 无法访问机器是什么意思?您不能编辑您的应用程序代码并在机器上更新它?只要我知道实现此类功能的通用且稳健的方法,就是使用 .net 远程处理或套接字编程或通过 Web 服务技术
    猜你喜欢
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多