Leetcode concurrency #1195 Fizz Buzz Multithreaded (in golang)

Chunting Wu
Mar 30, 2021

--

從開始刷concurrency到現在已經接觸過,Event、Lock和Semaphore,這題會用到另一個同步處理也會使用的技術:Barrier,Barrier是指當所有做事的人都必須將queue內的event全部依序執行,例如:ABC三個人同時拿queue[0]做,等大家都做完後,三人繼續拿queue[1],依此類推。

先看一下題目,看完就會知道為什麼一看就知道要用Barrier。有一個class有四個method(又來了),必須將四個method放在四個thread上執行,這四個method分別是:在3的倍數時印fizz、在5的倍數時印buzz、在15的倍數時印fizzbuzz,最後是上面都沒中就印數字。

因為golang沒有實作自己的Barrier,我本來想用WaitGroup來做,但怎麼試怎麼怪,最後決定WaitGroup還是維持他單純的用途就好:等所有人做完。那麼,就需要實作一個Barrier,這邊可以使用sync.Cond。如果寫過linux C應該會對pthread_cond_t有印象,這兩個是等價的。

當有了Barrier的實作,這題就一點也不難,就是分別判斷能不能整除3或5來決定個別要做甚麼,把輸入的整數丟進去大家一起一個一個做就好。

--

--

Chunting Wu
Chunting Wu

Written by Chunting Wu

Architect at SHOPLINE. Experienced in system design, backend development, and data engineering.

No responses yet