力扣交替列印FooBar

2021-09-26 01:58:13 字數 1501 閱讀 4780

這道題要注意的是兩個執行緒喚醒和等待的順序,應為第乙個執行緒會比第二個執行緒更早結束,所以如果第乙個執行緒已經結束,而第二個執行緒還在等待被喚醒,那第二個執行緒會一直等待下去,因此第乙個執行緒要先等待後喚醒,這樣他會先喚醒第二個執行緒再結束

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 解釋...