Golang中国
package main

import (
    "fmt"
    "math/rand"
    "time"
)

type prr struct {
    a int
}

var (
    testm = make(map[int]*prr, 0)
)

// 协成1
func reload() {
    t := make(map[int]*prr, 0)
    t[0] = &prr{0}
    t[1] = &prr{1}
    //t[2] = &prr{2}
    //t[3] = &prr{3}
    testm = t
    fmt.Println("reload")
}

// 协成2
func test1() {
    for {
        for _, v := range testm {
            fmt.Println(v) 
            time.Sleep(time.Millisecond * 1)
        }
    }
}

func test2() {
    for {
        xx := rand.Int()
        v, ok := testm[xx]
        if ok {
            v.a = xx
        }
        time.Sleep(time.Millisecond * 1)
    }

}

func main() {
    testm[0] = &prr{0}
    testm[1] = &prr{1}
    testm[2] = &prr{2}

    for i := 0; i < 100; i++ {
        go test1()
    }

    for i := 0; i < 200; i++ {
        go test2()
    }

    for {
        reload()
        time.Sleep(time.Millisecond * 1)
    }
}

请问一下这个样的reload安全吗


jimmykuu 于 2017-06-05 18:06 修改
1 回复
dstorm
#1 dstorm • 2017-06-05 19:05

大佬解惑啊,会不会有runtime的panic???

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。

作者

发表话题

作者其它话题