Go 协程

来源:互联网 发布:男性保健药品 知乎 编辑:程序博客网 时间:2024/05/30 22:46

channel通信:

package mainimport (    "fmt")//线程(协程)间通信:1.共享内存,2.通道//事实上Go语言主要使用消息机制(channel)来作为通信模型。func count1(ch chan int, i int) {    fmt.Println("counter = ", i)    ch <- 1}func main() {    chs := make([]chan int, 10)    for i := 0; i < 10; i++ {        chs[i] = make(chan int)        go count1(chs[i], i)    }    //索引key,value    for _, ch := range (chs) {        <-ch        //阻塞读取channel数据,相当于同步    }}

共享内存通信:

package mainimport (    "fmt"    "sync"    "runtime")//线程(协程)间通信:1.共享内存,2.通道//事实上Go语言主要使用消息机制(channel)来作为通信模型。var counter int = 0func count(lock *sync.Mutex) {    lock.Lock()    counter++    fmt.Println("counter = ", counter)    lock.Unlock()}func main() {    lock := sync.Mutex{}    for i := 0; i < 10; i++ {        go count(&lock)    }    for {        runtime.Gosched()        //让出时间片        if counter >= 10 {            break        }    }}

参考链接

原创粉丝点击