并发订阅pubsub结果导致致命错误:同时写入映射
创始人
2024-12-18 06:30:22
0

使用锁来同步访问共享的map。

下面是一个示例代码:

package main

import (
    "context"
    "fmt"
    "sync"

    "cloud.google.com/go/pubsub"
)

func main() {
    ctx := context.Background()

    client, err := pubsub.NewClient(ctx, "my-project-id")
    if err != nil {
        panic(err)
    }

    topic := client.Topic("my-topic")
    defer topic.Stop()

    var mu sync.Mutex
    subscriptions := make(map[string]*pubsub.Subscription)

    for i := 0; i < 10; i++ {
        go func() {
            sub, err := client.CreateSubscription(ctx, "my-subscription", pubsub.SubscriptionConfig{
                Topic:       topic,
                AckDeadline: 10 * time.Second,
            })
            if err != nil {
                panic(err)
            }

            mu.Lock()
            subscriptions[sub.ID()] = sub
            mu.Unlock()

            select {
            case <-ctx.Done():
                return
            case <-sub.Done():
                mu.Lock()
                delete(subscriptions, sub.ID())
                mu.Unlock()
            }
        }()
    }

    for {
        mu.Lock()
        numSubs := len(subscriptions)
        mu.Unlock()

        fmt.Println("Number of subscriptions:", numSubs)

        time.Sleep(time.Second)
    }
}

在这个示例代码中,我们创建了一个subscriptions map来存储所有的Subscription。在创建Subscription时,我们使用了一个mutex锁来同步对map的访问。在Subscription完成后,我们使用Lock和Unlock方法来持有和释放锁,以确保多个goroutine能够安全地访问map。此外,所有访问map的代码都在匿名函数中运行,以确保创建Subscription时的所有访问都在单个goroutine中运行。

相关内容

热门资讯

德扑起手牌胜率图!德扑助手,德... 德扑起手牌胜率图!德扑助手,德扑助手真是真的有挂(详细透视辅助工具教程)小薇(透视辅助)致您一封信;...
德州微扑克辅助!wpk线上德州... 德州微扑克辅助!wpk线上德州俱乐部,约局吧辅助工具获取方法(详细透视辅助神器脚本);1、约局吧辅助...
德扑ai助手!德扑之星隐藏功能... 德扑ai助手!德扑之星隐藏功能,德扑助手本来真的有挂(详细透视辅助脚本教程);1、完成德扑ai助手的...
德州ai人工智能!德州ai智能... 德州ai人工智能!德州ai智能辅助是有,云扑克辅助器真假(详细透视辅助机制黑科技)1、打开软件启动之...
德扑之星辅助器购买!德扑之星可... 德扑之星辅助器购买!德扑之星可以设置埋牌,德扑ai果然真的有挂(详细透视辅助机制教程);1、用户打开...
智星德州菠萝外 挂!德州ai辅... 智星德州菠萝外 挂!德州ai辅助工具,扑克时间辅助软件(详细透视辅助器脚本);1、下载好扑克时间辅助...
德扑之星辅助器购买!德扑之星的... 德扑之星辅助器购买!德扑之星的优势,德扑助手其实真的有挂(详细透视辅助插件教程);小薇(透视辅助)致...
德州之星有辅助挂!德州之星ap... 德州之星有辅助挂!德州之星app安卓版,fishpoker app辅助(详细透视辅助挂方法)1、这是...
德扑之星猫腻!德扑胜率最低的牌... 德扑之星猫腻!德扑胜率最低的牌,德扑之星都是真的有挂(详细透视辅助脚本教程);1、每一步都需要思考,...
德州ai人工智能!德州透视辅助... 德州ai人工智能!德州透视辅助工具,gg扑克正规(详细透视辅助插件教程);1、进入到gg扑克正规黑科...