交替列印之類的問題,一般通過乙個主線程判斷其他執行緒的進入條件,通過訊號量實現即可。
此題中,通過num主線程,來判斷其他執行緒的進入條件。每個執行緒執行時,其他執行緒是被阻塞的。
import threading
class
fizzbuzz
:def
__init__
(self, n:
int)
: self.n = n
self.fizz1 = threading.semaphore(0)
self.buzz1 = threading.semaphore(0)
self.fizzbuzz1 = threading.semaphore(0)
self.num = threading.semaphore(1)
# printfizz() outputs "fizz"
deffizz
(self, printfizz:
'callable[, none]')-
>
none
:for i in
range(1
, self.n+1)
:if(i %3==
0)and(i %5!=
0): self.fizz1.acquire(
) printfizz(
) self.num.release(
)# printbuzz() outputs "buzz"
defbuzz
(self, printbuzz:
'callable[, none]')-
>
none
:for i in
range(1
, self.n+1)
:if(i %3!=
0)and(i %5==
0): self.buzz1.acquire(
) printbuzz(
) self.num.release(
)# printfizzbuzz() outputs "fizzbuzz"
deffizzbuzz
(self, printfizzbuzz:
'callable[, none]')-
>
none
:for i in
range(1
, self.n+1)
:if(i %3==
0)and(i %5==
0): self.fizzbuzz1.acquire(
) printfizzbuzz(
) self.num.release(
)# printnumber(x) outputs "x", where x is an integer.
defnumber
(self, printnumber:
'callable[[int], none]')-
>
none
:for i in
range(1
, self.n+1)
: self.num.acquire()if
(i %3==
0)and(i %5!=
0): self.fizz1.release(
)elif
(i %3!=
0)and(i %5==
0): self.buzz1.release(
)elif
(i %3==
0)and(i %5==
0): self.fizzbuzz1.release(
)else
: printnumber(i)
self.num.release(
)
四個執行緒交替列印字串
於leetcode1195 編寫乙個可以從 1 到 n 輸出代表這個數字的字串的程式,但是 如果這個數字可以被 3 整除,輸出 fizz 如果這個數字可以被 5 整除,輸出 buzz 如果這個數字可以同時被 3 和 5 整除,輸出 fizzbuzz 例如,當 n 15,輸出 1,2,fizz,4,b...
DbgPrint列印字串
1 直接列印字串。dbgprint hello world 2 空結尾的字串,你可以用普通得c 語法表示字串常量 char variable string hello world dbgprint s variable string 3 空結尾的寬字串 wchar 型別 wchar string w...
Scala列印字串
1 字串,通過 號連線 2 printf用法 字串,通過 傳值。3 字串模板 通過 獲取變數值 列印字串 val username zhangdan val userage 20println 使用者名稱 username 使用者年齡 userage scala中簡化了關於json的表達 print...