基於3個goroutine交替順序列印自然數

2021-10-09 09:21:14 字數 2550 閱讀 8946

篳路藍縷,以啟山林。撫有蠻夷,以屬華夏。不鳴則已,一鳴驚人。

——《左傳`宣公十二年》

今兒看到了乙個題目,電腦開著順手實現下。方便起見,下文以a、b、c字母來標識三個goroutine。這個題目方式還是很多的,**變換多樣。上**:

姿勢1:chan通知與切換

一句話來描述思路:a對b說:我搞完了,輪到你了,b對c說:我搞完了,輪到你了,c對a說:我搞完了,輪到你了......子子孫孫無窮匱也、

func main() 

} }()

go func()

} }()

go func()

select

} }()

for !false

}控制台:

[a]: 1

[b]: 2

[c]: 3

[a]: 4

[b]: 5

[c]: 6

[a]: 7

[b]: 8

[c]: 9

[a]: 10

[b]: 11

[c]: 12

[a]: 13

[b]: 14

[c]: 15

[a]: 16

[b]: 17

[c]: 18

[a]: 19

[b]: 20

[c]: 21

[a]: 22

[b]: 23

[c]: 24

......

...

姿勢2:換一下角色,列印操作交給main線,寫入由a、b、c各自完成

type data struct 

func main()

cha <- data0

i += 3

} }()

go func()

chb <- data0

i += 3

} }()

go func()

chc <- data0

i += 3

} }()

flag := false

for !flag

}控制台:

[a]: 1

[b]: 2

[c]: 3

[a]: 4

[b]: 5

[c]: 6

[a]: 7

[b]: 8

[c]: 9

[a]: 10

[b]: 11

[c]: 12

[a]: 13

[b]: 14

[c]: 15

[a]: 16

[b]: 17

[c]: 18

[a]: 19

[b]: 20

[c]: 21

[a]: 22

[b]: 23

[c]: 24

......

...

姿勢3:就以列印結果來衡量的話,sleep也能用上

type obj struct 

func main()

} }()

go func()

} }()

go func()

} }()

for i := 1; ; i++

if (i-1)%3 == 0

if (i-2)%3 == 0

if (i-3)%3 == 0 }}

控制台:

[a]: 1

[b]: 2

[c]: 3

[a]: 4

[b]: 5

[c]: 6

[a]: 7

[b]: 8

[c]: 9

[a]: 10

[b]: 11

[c]: 12

[a]: 13

[b]: 14

[c]: 15

[a]: 16

[b]: 17

[c]: 18

[a]: 19

[b]: 20

[c]: 21

[a]: 22

[b]: 23

[c]: 24

......

...

go併發之美·乾貨好文合集:

go併發之美·redis篇·介面冪等性設計實現

go併發之美·redis篇·實現實時排行榜

go併發日記·多goroutine併發安全的操作共享變數

go併發日記·常用併發場景中的併發控制思路與方案

go併發日記·避免goroutine洩漏/實現協程可控

go併發日記·深入理解go語言channel與goroutine阻塞

go併發日記·基於channel優雅的進行併發控制

go併發日記·waitgroup併發控制探索及實際場景運用

channel死鎖的情況分析

go併發之美·b操作伴隨a操作(b和a同步)

go多函式併發通用工具的設計與實現

java兩個執行緒交替執行

一般來說執行緒鎖可以用 synchronized lock。這個題目的難點不在於同步塊,而在於怎麼樣設計這個兩個執行緒的交替實現。由於執行緒爭用cpu的隨機性,就需要a線,b執行緒執行,在b執行完一次進入等待之前喚醒a,如此往復,那麼這裡就要用上notify和wait了。author wangh.w...

實現兩個執行緒交替執行

比如執行緒1輸出0,執行緒2輸出0,執行緒1輸出1,執行緒2輸出1。既然有先後順序,優先想到和順序有關的鎖,reentrantlock的公平鎖,等待時間最長的執行緒優先獲取鎖。如下 public class alternatedemo static class task implements run...

3執行緒交替列印ABC,列印n次

今天看到乙個多執行緒的面試題,初看起來很簡單,實際寫起來還是有需要注意的地方,寫了兩個解法,記錄下 都比較簡單,不解釋。private inte ce callback private static class abctestconditionrunnable implements runnable...