当通道在多个协程之间传输的是指向数据的指针是,且读写操作是由不同的协程操作,则需要提供额外的同步动作。
原因:
package main
import (
"fmt"
"time"
)
var in=make(chan *int,1)
func f1(){
a:=1
b:=&a
in<-b
a=100
}
func f2(){
c:=<-in
fmt.Println(*c)
}
func main(){
go f1()
time.Sleep(time.Second*1)
go f2()
time.Sleep(time.Second*3)
}
go f2()的运行结果:
f1()的a=100操作,使得f2同样被修改。