本文来瞅瞅常见并发模式的用法. 在大多数语言中,为了解决线程同步问题都会用到加锁的方法;Go也不例外,但是Go也提供了另外的方式来解决同步通信问题:将共享的值通过通道来进行传输.实践中通过goroutine和channel的配合使用实现了这一特性.
package main import ( "fmt" "sync" ) func main() { var mux sync.Mutex // 先锁一次 mux.Lock() go func() { fmt.Println("Hello my friend!") // 在后台线程中解锁 mux.Unlock() }() // 尝试再锁一次,由于锁已被占用会阻塞直到解锁 mux.Lock() }
package main import ( "fmt" "sync" ) func main() { // 创建waitgroup var wg sync.WaitGroup // 开启10个打印线程 for i:=0; i<10; i+=1 { // 每开启一个线程前,等待事件计数加1 wg.Add(1) idx := i go func(index int) { fmt.Printf("[%d]Hello my friend!n", index) // 向通道写数据 wg.Done() }(idx) } // Wait方法,等待所有事件完成 wg.Wait() }
package main import ( "fmt" ) func main() { // 创建一个无缓存通道 done := make(chan int) go func() { fmt.Println("Hello my friend!") // 向通道写数据 done <- 1 }() // 堵塞等待接收数据 <-done }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算