第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

訪問在 for 循環(huán)內(nèi)修改的公共變量時,我看不到變化

訪問在 for 循環(huán)內(nèi)修改的公共變量時,我看不到變化

Go
UYOU 2022-12-05 17:26:04
我有一個我們稱之為 Tpus 的公共變量,我在無限循環(huán)中修改了這個值,但是當我嘗試在 for 循環(huán)中打印 Tpus 以及在 for 循環(huán)外的 goroutine 中打印 Tpus 時,我得到了 2 個不同的結(jié)果,我在尋找什么做的是在 goroutine 中得到與我在 for 循環(huán)中得到的結(jié)果相同的結(jié)果。    var Tpus []string        func TPU_Calc(destination string) {        clusternodes := GetClusterNodes(destination)        go func() {            wg.Add(1)            time.Sleep(2 * time.Second)            for {                time.Sleep(150 * time.Millisecond)                //fmt.Printf("\n + %e", Tpus)            }        }()        for {            slot := GetSlot(destination)            slotleaders := GetSlotLeaders(destination, strconv.FormatUint(slot+10, 10))            for x := 0; x < 80; x++ {                for z := 0; z < len(clusternodes.Result); z++ {                    if slotleaders[x] == clusternodes.Result[z].Pubkey {                        if len(Tpus) >= 2 {                            X := RemoveIndex(Tpus, 0)                            Tpus = append(X, clusternodes.Result[x].Tpu)                            fmt.Printf("\n + %e", Tpus)                        } else {                            Tpus = append(Tpus, clusternodes.Result[x].Tpu)                        }                    }                }            }        }    }上面代碼的結(jié)果:[%!e(字符串=136.144.49.213:8004)%!e(字符串=198.55.56.164:8004)][%!e(字符串=198.55.56.164:8004)%!e(字符串=13.124.174.97:8003)][%!e(字符串=13.124.174.97:8003) %!e(字符串=185.16.38.73:8003)][%!e(字符串=185.16.38.73:8003) %!e(字符串=103.28.52.250:8003)][%!e(字符串=103.28.52.250:8003) %!e(字符串=18.214.103.198:8004)][%!e(字符串=18.214.103.198:8004)%!e(字符串=185.188.42.43:9003)][%!e(字符串=185.188.42.43:9003)%!e(字符串=135.181.115.253:8003)]
查看完整描述

1 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經(jīng)驗 獲得超6個贊

var globalvar []string


func main() {

    var mu sync.Mutex


    go func() {

        for {

            // Block access to a global variable, so that

            // no one can change it outside the goroutine.

            // If it's already locked outside the goroutine,

            // then wait for unlocking.

            mu.Lock()


            // Some actions with a global variable...

            fmt.Printf("%v\n", globalvar)


            // Unlocking access to a global variable

            mu.Unlock()


            // Some code...

        }

    }()


    for i := 0; i < 255; i++ {

        // Block access to a global variable.

        // If it's already locked inside the goroutine,

        // then wait for unlocking.

        mu.Lock()


        // Some actions with a global variable

        globalvar = append(globalvar, "Str #"+strconv.Itoa(i))


        // Unlock access

        mu.Unlock()


        // Some code...

    }

}


您還可以定義一個特殊的結(jié)構(gòu),其中包含互斥體、值和更改其值的方法。是這樣的:



type TpusContainer struct {

    mu    sync.Mutex

    value []string

}


func (t *TpusContainer) RemoveIndex(i int) {

    t.mu.Lock()

    defer t.mu.Unlock()

    t.value = RemoveIndex(t.value, i)

}


func (t *TpusContainer) Append(elem string) {

    t.mu.Lock()

    defer t.mu.Unlock()

    t.value = append(t.value, elem)

}


func (t *TpusContainer) String() string {

    t.mu.Lock()

    defer t.mu.Unlock()

    return fmt.Sprintf("%v", t.value)

}


var Tpus TpusContainer


func main() {

    go func() {

        for {

            fmt.Printf("%v\n", Tpus)

        }

    }()


    for i := 0; i < 255; i++ {

        Tpus.RemoveIndex(0)

        Tpus.Append("Some string #"+strconv.Itoa(i))

    }

}


就個人而言,我更喜歡第二種方法。


查看完整回答
反對 回復 2022-12-05
  • 1 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號