大佬教程收集整理的这篇文章主要介绍了golang学习笔记[3] 并发编程,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
// one project main.go package main import ( "fmt" "runtime" "sync" ) var counter int = 0 func Count(lock *sync.MuteX) { //每次对counter操作前都需要加锁,每次使用完之后都要解锁。 lock.Lock() counter++ fmt.Println(counter) lock.Unlock() } func main() { //创建一个sync包下的Mutex结构体 lock := &sync.Mutex{} for i := 0; i < 10; i++ { go Count(lock) } for { lock.Lock() c := counter lock.Unlock() runtime.Gosched() if c > 0 { break } } }
不要通过共享内存来通信,而应该通过通信来共享内存。
使用chAnnel来实现刚刚那个例子
package main import "fmt" func Count(ch chan int) { fmt.Println("CounTing") ch <- 1 } func main() { chs := make([]chan int,10) for i := 0; i < 10; i++ { chs[i] = make(chan int) go Count(chs[i]) } for _,ch := range chs { <-ch } }
// one project main.go package main import ( "fmt" ) func main() { //chAnnel声明 // var chAnname chan elementType var ch chan int //@L_915_0@map键为Stringkey为bool类型的chAnnel //var m map[String]chan bool //使用make定义一个chAnnel //ch1 := make(chan int) /* 将一个数据写入(发送)带chAnnel ch <- value 将一个数据从chAnnel中读出 value := <- value */ //SELEct语句 SELEct { //如果chan1成功读到数据,则进行该case处理语句 case <-chan1: //如果成功向chan2写入数据,则进行该case处理语句 case chan2 <- 1: //如果上面都没有成功,则进入default处理流程 default: } ch2 := make(chan int) for { SELEct { case ch <- 0: case ch <- 1: } i := <-ch2 fmt.Println("value",i) } //缓冲机制 //创建一个带缓冲的chAnnel c := make(chan int,1024) //使用for range读取 for i := range c { fmt.Println(i) } }
以上是大佬教程为你收集整理的golang学习笔记[3] 并发编程全部内容,希望文章能够帮你解决golang学习笔记[3] 并发编程所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。