GO中如何实现跨平台文件锁

我需要在 GO 中实现以下行为:

  1. 进程应该能够读取文件,而不管其他进程是否已锁定文件进行写入

  2. 进程应该先获得写锁,然后才能写入文件。这是为了保证多个进程不能写入同一个文件

  3. 一个进程不应该等待获得写锁,如果它不能获得锁,它应该继续前进

对于基于 UNIX 的系统,GO 中的 syscall 包定义了 flock 函数,可以通过以下方式实现上述行为:

  1. 将 syscall.flock 函数与 LOCK_EX 一起使用 | LOCK_NB 在写入文件之前尝试获取锁

  2. 在读取文件之前不要检查任何锁

GO 中的 Windows 系统调用包,不包括 flock。鉴于此,我怎样才能最好地编写可以执行跨平台并具有上述行为的代码?

我想尝试在不进行操作系统特定调用或使用不安全的情况下实现这一点。

PS:我不想要强制文件锁定,进程会在执行文件操作之前检查文件锁定


人到中年有点甜
浏览 327回答 1
1回答

Qyouu

使用编译器标志。窗口标志:// +build windows,!linux...linux的标志:// +build linux,!windows...如果要使用平台本机锁定功能。一种解决方法可能是分配(据说)跨平台的单例资源,例如绑定到端口并依赖于仅可能一次。绑定操作的错误条件将是决定因素。就我个人而言,我会选择使用平台本机选项,并且只制作一个界面,这样人们就可以轻松添加测试,从而确保事情不会中断。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go