我是否正确理解 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 时,将发生以下两种情况之一:

  1. 如果锁可用,threadLock.acquire() 将 return,线程可以继续。
  2. 如果锁不可用,threadLock.acquire() return,线程将阻塞。

持有锁的线程将继续持有锁,直到它们调用 threadLock.release()。那时,如果任何其他线程阻塞了对 threadLock.acquire 的调用, 将选择其中一个 来获取锁,并且它的调用最终将 return.

所以是的,如果您有两个或多个 myThread 实例,那么它们中只有一个可以一次执行 print_date