gpt4 book ai didi

go - 在 Go 中实现信号量的最佳方式是什么

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

我有一个测试程序,我想从命令行运行该程序的多个副本,我需要知道要启动的程序的第一个实例。在 Dart 中,我执行以下有人向我建议的操作:

RawServerSocket.bind("127.0.0.1", 8087)

如果失败,那么我就知道另一个程序已经“锁定”了端口。这对我来说足够好地解决了这个问题。当程序终止或显式关闭套接字时,锁将被释放。

如何在 Go 中实现类似的结果?

最佳答案

您没有说明您使用的是哪个平台。如果您想跨平台,那么打开本地套接字的解决方案非常简单。这是您在 Go 中的操作方法。

package main

import (
"log"
"net"
"time"
)

func main() {
ln, err := net.Listen("tcp", "127.0.0.1:9876")
if err != nil {
log.Fatal("Failed to get lock: ", err)
}
defer ln.Close()
log.Print("Started")
time.Sleep(time.Second * 10)
log.Print("Ending")
}

不幸的是,一种不使用套接字的跨平台方法非常困难,并且会涉及两组代码,一组用于类似 Unix 的系统,另一组用于 Windows。

请注意,病毒检查程序不喜欢在 Windows 上打开监听套接字的程序...

关于go - 在 Go 中实现信号量的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18987748/

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