這道題要注意的是兩個執行緒喚醒和等待的順序,應為第乙個執行緒會比第二個執行緒更早結束,所以如果第乙個執行緒已經結束,而第二個執行緒還在等待被喚醒,那第二個執行緒會一直等待下去,因此第乙個執行緒要先等待後喚醒,這樣他會先喚醒第二個執行緒再結束
from threading import condition, thread
import time
defprintfoo()
:print
('foo'
, end='')
time.sleep(
0.5)
defprintbar()
:print
('bar'
, end='')
time.sleep(
0.5)
class
foobar
:def
__init__
(self, n)
: self.n = n
self._lock = condition(
)def
foo(self, printfoo)
->
none
: self._lock.acquire(
)for i in
range
(self.n)
: printfoo(
)# 這裡要先等待
self._lock.wait(
) self._lock.notify_all(
) self._lock.release(
)def
bar(self, printbar)
->
none
: self._lock.acquire(
)for i in
range
(self.n)
: printbar(
)# 這裡要先喚醒其他執行緒,
self._lock.notify_all(
) self._lock.wait(
) self._lock.release(
)if __name__ ==
'__main__'
: n =
10 foobar = foobar(n)
t1 = thread(target=foobar.foo, args=
(printfoo,))
t2 = thread(target=foobar.bar, args=
(printbar,))
# t2.start()
t1.start(
) t2.start(
)
執行用時 :132 ms, 在所有 python3 提交中擊敗了85.39%的使用者
記憶體消耗 :16.1 mb, 在所有 python3 提交中擊敗了100.00%的使用者
力扣1115 交替列印FooBar
力扣1115.交替列印foobar 我們提供乙個類 class foobar public void bar 兩個不同的執行緒將會共用乙個 foobar 例項。其中乙個執行緒將會呼叫 foo 方法,另乙個執行緒將會呼叫 bar 方法。請設計修改程式,以確保 foobar 被輸出 n 次。建立兩個互斥...
交替列印FooBar
我們提供乙個類 class foobar public void bar 兩個不同的執行緒將會共用乙個 foobar 例項。其中乙個執行緒將會呼叫 foo 方法,另乙個執行緒將會呼叫 bar 方法。請設計修改程式,以確保 foobar 被輸出 n 次。示例 1 輸入 n 1 輸出 foobar 解釋...
交替列印FooBar
我們提供乙個類 class foobar public void bar 兩個不同的執行緒將會共用乙個 foobar 例項。其中乙個執行緒將會呼叫 foo 方法,另乙個執行緒將會呼叫 bar 方法。請設計修改程式,以確保 foobar 被輸出 n 次。示例 1 輸入 n 1 輸出 foobar 解釋...