11

在这些场景中是否Event做同样的事情?Lock

class MyThread1(threading.Thread):
    def __init__(event):
        self.event = event

    def run(self):
        self.event.wait()
        # do something
        self.event.clear()

其他:

class MyThread2(threading.Thread):
    def __init__(lock):
        self.lock = lock

    def run(self):
        self.lock.acquire()
        # do something
        self.lock.release()
4

2 回答 2

12

如果你等待一个事件,执行就会停止,直到一个event.set()事件发生

event.wait()  # waits for event.set()

仅当已获取锁时,获取锁才会停止

lock.acquire() # first time: returns true
lock.acquire() # second time: stalls until lock.release()

这两个类都有不同的用例。本文将帮助您了解差异。

于 2012-07-12T07:59:54.323 回答
10

实际上,我发现 Python 中的 Event 与 Lock 之间的区别是:

  • 一个事件可以有很多服务员,当事件被设置或触发时,所有这些服务员都会被唤醒。
  • 一个锁可以有多个等待者,当锁被释放时,只有一个等待者会被唤醒,从而获得锁。

仍然可能存在更多差异,但以上对我来说是最明显的。

于 2018-07-16T04:47:15.460 回答