首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在GO中实现跨平台文件锁

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

Stack Overflow用户
提问于 2015-09-26 14:40:05
回答 1查看 1.5K关注 0票数 3

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

  1. 进程应该能够读取文件,而不管是否有任何其他进程锁定了该文件以进行写入。
  2. 进程应该先获得写锁,然后才能写入文件。这是为了确保多个进程不能写入同一个文件。
  3. 进程不应该等待获得写锁,如果它不能获得锁,它应该继续前进。

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

  1. 在写入文件之前,使用syscall.flock函数与LOCK_EX \ LOCK_NB一起尝试获取锁
  2. 在读取文件之前不要检查任何锁。

GO中用于Windows的syscall包,不包括flock。考虑到这一点,我如何才能最好地编写能够执行跨平台并具有上述行为的代码?

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

PS:我不希望强制文件锁定,在执行文件操作之前,进程将检查文件锁。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-31 09:37:18

使用编译器标志。

窗口旗帜:

代码语言:javascript
复制
// +build windows,!linux
...

用于linux的标志:

代码语言:javascript
复制
// +build linux,!windows
...

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

解决办法可能是分配资源,这些资源(据推测)是跨平台的单个对象,比如绑定到一个端口,并且只依赖它一次。绑定操作的错误条件将是决定因素。

就我个人而言,我会选择使用平台本机选项,只需创建一个接口,这样就可以轻松地添加测试,从而确保一切不会中断。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32798354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档