云起工作室 15711107967
goroutine并发
1970-01-01 08:33:44

1、基础

var wg sync.WaitGroup

func hello(){

printLn("hello")

wg.Done()

}


func main(){

wg.Add(1) 派几个人去干

go hello()

wg.Wait()

}



2、子线程与主线程通信 channel

var 变量 chan 元素类型 //声明通道类型 chan 是关键字


ch1:=make(chan int,num) //num是个数字,定义有几个值,可以省略

ch2:=make(chan bool)

ch3:=make(chan []int)


ch:=make(chan int)


将一个值发送到通道中

ch <- 10


接受 接受通道中的值

x:= <-ch


关闭 //不是必须的

close(ch)


3、例子

func f1(ch chan int){

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

ch<-i

}

close(ch)

}

func f2(ch1 chan int,ch2 chan int){

for {

tmp,ok:=<-ch1

if !ok{

break

}

ch2 <- tmp*tmp //将平方值赋给ch2

}

}

func main(){

ch1:=make(chan int,100)

ch2:=make(chan int , 100)

go f1(ch1)

go f2(ch1,ch2)

for ret:=range ch2{

println(ret)

}

}

4、单向通道

func f1(ch1 chan<- int){} 只能发送到 ch1

func f2(ch2 <-chan int) 只能 在ch2里取值


var lock sync.Mutex 互斥锁

lock.lock()

x=x+1

lock.Unlock()


var lock sync.RWMutex 读写互斥锁

lock.Rlock() 读的时候不排斥读锁,但排斥其他锁

lockUnRlock()