比通过网络上的.lock文件更好的“互斥”方法?

我有一个小型安装程序,由访问服务器上Windows共享的 n 个客户端(CL0,CL1,... CL n )组成。

在该服务器上,一个json文件保存着游戏中所有玩家都需要读取和写入的重要数据。它包含不断读取和更改的键值对:

{
    "Currentactive":  "CL1","DataToProcess":  false,"NeedsReboot":  false,"Timestamp":  "2020-05-25 16:10"
}

我已经使用PowerShell完成了以下工作: 如果客户端写入文件,则会生成一个锁定文件,其中包含访问的主机名和时间戳。访问后,锁定文件将被删除。每个写入“作业”首先检查是否有锁定文件,并且时间戳是否仍然有效,然后在删除锁定后有条件地将其写入文件。

#Some Pseudo Code:
if(!Test-Path $lockfile){
  gc $json
}else{
  #wait for some time and try again
  #check if lock is from my own hostname
  #check if timestamp in lock is still valid
}

这行得通,但是建立起来非常复杂,因为我需要实现锁机制,并且当客户端由于多种原因而无法删除文件时,还需要一种强制删除锁的方法。 (而且我确定我还包括一些错误...)。另外,在某些情况下,读取文件将返回一个空文件。我认为这是在另一个客户端写入文件的过程中出现的最佳时机,即在刷新该文件然后填充新内容后。

我一直在寻找其他选项,例如互斥锁,并且它在具有多个线程的单个客户端上就像一个魅力,但是由于依赖于一个系统范围内的SafeHandles,而不是在网络上具有多个客户端。

是否可以通过网络运行互斥锁

我也偶然发现了AlphaFS,它可以让我在文件系统上进行事务处理,但这并不能解决导致多个客户端同时访问一个文件的根本原因。

是否有更好的方法来存储数据?我当时在考虑Windows注册表,但在那里找不到关于互斥锁的任何内容。

任何想法都值得赞赏!

iCMS 回答:比通过网络上的.lock文件更好的“互斥”方法?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2276848.html

大家都在问