我正在与测量设备通话。我基本上发送命令并接收答案。但我提供了一个方法ask
发送一个命令并回读答案。如果我锁定了这个方法,由于被调用的方法read
和write
锁定,我也会发生死锁。如果我不锁定另一个线程,可以在我阅读之前窃取答案或写信。你将如何实现这一点?正确锁定方法调用
import threading
class Device(object):
lock = threading.Lock()
def ask(self, value):
# can't use lock here would block
self.write(value) # another thread could start reading the answer
return self.read()
def read(self):
with self.lock:
# read values from device
def write(self, value):
with self.lock:
# send command to device
恭喜,您刚刚发现STM支持者在说“锁不合作”时谈论的一件事。 – delnan
不应该是'lock = threading.Lock()'括号吗? –
@StevenRumbalski Ups,我的坏。修复 :) – P3trus