在Go中实现信号量的最佳方法是什么

布莱恩·吴(Brian Oh):

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

RawServerSocket.bind("127.0.0.1", 8087)

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

如何在Go中获得类似的结果?

尼克·克雷格·伍德(Nick Craig-Wood):

您没有说您正在使用哪个平台。如果要跨平台,那么打开本地套接字的解决方案非常简单。这是您在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上打开监听套接字的程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java中的阻塞信号量是什么?

Java中的互斥量和信号量是什么?主要区别是什么?

信号量(操作系统)中传递给sem_init()的参数的含义是什么?

信号量是原子的原因是什么

如何在C中实现自己的信号量?

在c ++中,扩展现有数据结构以包括信号量或类似方法的最简单方法是什么?

信号量/关键部分的实现

对信号量的 wait() 操作实现的困惑

测试信号量实现时出错

用队列实现信号量

在Go中实现构造函数/ init方法的最佳方法是什么

在Go中为“超类方法实现”建模的最佳方法是什么?

信号量wait()函数中while循环的目的是什么?可以用if语句代替吗?

异步方法中的信号量等待与WaitAsync

在Objective C中对信号量使用委托方法

什么是非阻塞信号量?

一个实现信号量的建议,为什么是错误的?

信号量实现:为什么禁用测试和设置所需的中断?

二进制信号量的java结构是什么

在信号量上下文中,P和V操作的原始含义是什么?

使用二进制信号量实现计数信号量

信号量功能中的死锁

信号量类中的公平设置

OS X中的信号量数组

在 Reactor 中实现异步副作用的最佳方法是什么?

在 JPA 中实现互斥关系的最佳方法是什么?

在Angular 2中实现滑动导航的最佳方法是什么?

在Base Controller中实现依赖注入的最佳方法是什么

在C中实现函数重载的最佳方法是什么?