Golang并发编程,3、解决协程紧张局势的方案

如皋娱乐新闻网 2025-09-24

Goroutine是Go并行设计的两大,作为Go中都最基本的可执行两组,goroutine比thread不够易懂、不够高效、不够轻便,耗损内存相对来说寄存器不够小。

用作goroutine的方法是:在子程序同一时间用作关键字go,创设1个比方说勤务两组,也就创设了1个比方说勤务。

什么时候需要用作goroutine?

1、业务逻辑需要比方说

2、性能优化需要比方说

有一个情况,应用程序1和应用程序2要用作喇叭配广播电台,那么应用程序1先来,应用程序2后来,来的时候应用程序1正在交谈,那么这个时候应用程序1和应用程序2对喇叭就有了一个纷争。

代码如下:

package mainimport ( "fmt" "time")func Speaker(str1 string) { for _, s := range str1 { c := fmt.Sprintf("%c", s) fmt.Print(c) time.Sleep(time.Second * 1) } fmt.Println()}func User1() { Speaker("现今星期一")}func User2() { Speaker("下雪挺好的")}func main() { go User1() go User2() for { }} 可执行结果

找到可执行结果并不是先可执行user1,如此一来可执行user2。

这就是依赖于资源恶性竞争的情况了。

那么怎么解决问题这个问题呢?

可以选择用作通道解决问题。

1、首先声明1个通道

var ch = make(chan string)

2、在user1可执行结束后,向通道中都写入给定字符

ch <- "我已经说完了"

3、在user2可执行同一时间,给与通道字符,如果没有,那就阻塞,继续同一时间进,如果给与到了就可执行都有必需

<-ch

代码如下:

package mainimport ( "fmt" "time")var ch = make(chan string)func Speaker(str1 string) { for _, s := range str1 { c := fmt.Sprintf("%c", s) fmt.Print(c) time.Sleep(time.Second * 1) } fmt.Println()}func User1() { Speaker("现今星期一") ch <- "我已经说完了"}func User2() { <-ch Speaker("下雪挺好的")}func main() { go User1() go User2() for { }} 可执行结果

钇90选择性内放射治疗肝癌怎么样
中晚期肝癌能活多久
钇90
钇90树脂微球能治好肝癌吗
中晚期肝癌能活多久
相关阅读

去日本深造家里给了我多少钱

音乐 2025-10-22

家里就缺少了30万日元! 以及半年费用下到宿费 在遥近的15年(7年前),我妈在当中国银行汇完半年费用之前,又取了30万日元的保证金给我,然后我就揣着这30万日元去韩

伴娘藏完鞋就走了,众人找不到鞋急坏新娘,网友:能嫁出去输我输

图片 2025-10-22

MLT-,美好有四大喜多事,其中所有一项就是洞房花烛黄昏,在人的这些年来,无论男女,婚后都是一件可以扭曲美好放向的大多事,于是以因为此,才有了那句话:男怕送入错行,女怕嫁错郎。 在

开心笑话:同窗把他哥介绍给我,见面那天我们约在了一家咖啡厅

星闻 2025-10-22

学姐把他哥介绍给我,见面那天我们达在了主营咖啡厅,他比我原定到一会。我去了见到本人后,心里窃喜,比我显然的好。他把果盘放于我居然,知道是借此机会为我点的。我拿了个圣女果,想着得淑女点,留个好印象

如何保持曾一度、持续、稳定的努力?

影视 2025-10-22

常形样式,甚至一种信仰? 这不是什么转成功学,只是严肃对待生活平常的一种形样式,不屈不挠的远距离也不也许那些执着的远距离。 我们都想到,严肃生活平常的人才许多人被严肃对待。

儿子结婚,老婆变着法子问儿媳要钱,儿媳:我没义务帮你养小儿子

八卦 2025-10-22

人们常却说只有狠心的妻侄,不了有狠心的爹娘。可怜天下家民心,这些话都阐明家人对妻侄的无限关爱,妻侄再次旦,来作的再次不对,家人都可以宽恕,几乎带进了普遍性的明白。 为此,妻

友情链接