我是否正确理解 python lib "threading" 中获取和释放的工作方式?
Am I correclty understand how acquire and realease is work in python lib "threading"
我有这个代码:
class myThread(threading.Thread):
def __init__(self, name, counter):
print("Создание потока" + "\n")
threading.Thread.__init__(self)
print("Присваивание значений" + "\n")
self.threadID = counter
self.name = name
self.counter = counter
def run(self):
print("Starting" + self.name)
threadLock.acquire()
print_date(self.name, self.counter)
threadLock.release()
print("Exiting" + self.name)
如果我没理解错的话,threadLock.acquire()
和 threadLock.realese()
之间的所有代码都不能用于多个线程?
哦,还有 threadLock = threading.Lock()
这是真的还是方向不同?
你或多或少是正确的。当调用 threadLock.acquire
时,将发生以下两种情况之一:
- 如果锁可用,
threadLock.acquire()
将 return,线程可以继续。
- 如果锁不可用,
threadLock.acquire()
将不 return,线程将阻塞。
持有锁的线程将继续持有锁,直到它们调用 threadLock.release()
。那时,如果任何其他线程阻塞了对 threadLock.acquire
的调用, 将选择其中一个 来获取锁,并且它的调用最终将 return.
所以是的,如果您有两个或多个 myThread
实例,那么它们中只有一个可以一次执行 print_date
。
我有这个代码:
class myThread(threading.Thread):
def __init__(self, name, counter):
print("Создание потока" + "\n")
threading.Thread.__init__(self)
print("Присваивание значений" + "\n")
self.threadID = counter
self.name = name
self.counter = counter
def run(self):
print("Starting" + self.name)
threadLock.acquire()
print_date(self.name, self.counter)
threadLock.release()
print("Exiting" + self.name)
如果我没理解错的话,threadLock.acquire()
和 threadLock.realese()
之间的所有代码都不能用于多个线程?
哦,还有 threadLock = threading.Lock()
这是真的还是方向不同?
你或多或少是正确的。当调用 threadLock.acquire
时,将发生以下两种情况之一:
- 如果锁可用,
threadLock.acquire()
将 return,线程可以继续。 - 如果锁不可用,
threadLock.acquire()
将不 return,线程将阻塞。
持有锁的线程将继续持有锁,直到它们调用 threadLock.release()
。那时,如果任何其他线程阻塞了对 threadLock.acquire
的调用, 将选择其中一个 来获取锁,并且它的调用最终将 return.
所以是的,如果您有两个或多个 myThread
实例,那么它们中只有一个可以一次执行 print_date
。