为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
人到中年有点甜 2021-11-08 18:50:30
我需要在 GO 中实现以下行为:进程应该能够读取文件,而不管其他进程是否已锁定文件进行写入进程应该先获得写锁,然后才能写入文件。这是为了保证多个进程不能写入同一个文件一个进程不应该等待获得写锁,如果它不能获得锁,它应该继续前进对于基于 UNIX 的系统,GO 中的 syscall 包定义了 flock 函数,可以通过以下方式实现上述行为:将 syscall.flock 函数与 LOCK_EX 一起使用 | LOCK_NB 在写入文件之前尝试获取锁在读取文件之前不要检查任何锁GO 中的 Windows 系统调用包,不包括 flock。鉴于此,我怎样才能最好地编写可以执行跨平台并具有上述行为的代码?我想尝试在不进行操作系统特定调用或使用不安全的情况下实现这一点。PS:我不想要强制文件锁定,进程会在执行文件操作之前检查文件锁定
查看完整描述

1 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

使用编译器标志。


窗口标志:


// +build windows,!linux

...

linux的标志:


// +build linux,!windows

...

如果要使用平台本机锁定功能。


一种解决方法可能是分配(据说)跨平台的单例资源,例如绑定到端口并依赖于仅可能一次。绑定操作的错误条件将是决定因素。


就我个人而言,我会选择使用平台本机选项,并且只制作一个界面,这样人们就可以轻松添加测试,从而确保事情不会中断。


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 326 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信