gpt4 book ai didi

windows - 如何在GO中实现跨平台文件锁定

转载 作者:IT王子 更新时间:2023-10-29 01:15:31 24 4
gpt4 key购买 nike

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

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

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

  1. 使用带有 LOCK_EX 的 syscall.flock 函数 | LOCK_NB 在写入文件之前尝试获取锁
  2. 在读取文件之前不检查任何锁

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

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

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

最佳答案

使用编译器标志。

Windows 标志:

// +build windows,!linux
...

Linux 的标志:

// +build linux,!windows
...

如果你想使用平台原生的锁定功能。

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

就我个人而言,我会选择使用平台 native 选项,只创建一个界面,以便可以轻松添加测试,从而确保不会出现问题。

关于windows - 如何在GO中实现跨平台文件锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32798354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com