Python _thread 模块中的 Lock 是什么?
What is Lock in Python _thread module?
我看了"Core Python Applications Programming",里面写了这段代码
import _thread
from time import sleep, ctime
loops = [4, 2]
def loop(nloop, nsec, lock):
print("start loop", nloop, "at:", ctime())
sleep(nsec)
print("loop", nloop, "done at:", ctime())
lock.release()
def main():
print("starting at:", ctime())
locks = []
nloops = range(len(loops))
for i in nloops:
lock = _thread.allocate_lock()
a = lock.acquire()
locks.append(lock)
for i in nloops:
_thread.start_new_thread(loop, (i, loops[i], locks[i]))
for i in nloops:
while locks[i].locked(): pass
print("all DONE at:", ctime())
if __name__ == "__main__":
main()
在官方参考中,我看到了"only one thread at a time can acquire a lock"。
锁是为了保证一次只执行一个线程,不是吗?
现在我有两个问题。
- 为什么可以生产多把锁?
- 为什么两个线程可以同时获取一个锁?
关于 (1),您可以根据需要创建任意数量的锁——大概需要它们来保护多线程环境中的不同共享可变资源(个人而言,我认为具有多线程共享的编程环境许多可变资源是程序员过世后去的地方,如果他们过着非常糟糕的生活)。
Re (2), "Why can two thread acquire each lock at the same time" -- 他们绝对不能,这就是锁的全部意义:每个锁最多只能由一个线程持有在任何给定时间。锁定对象是使用操作系统为此目的提供的任何底层资源以这种方式构建的。
我看了"Core Python Applications Programming",里面写了这段代码
import _thread
from time import sleep, ctime
loops = [4, 2]
def loop(nloop, nsec, lock):
print("start loop", nloop, "at:", ctime())
sleep(nsec)
print("loop", nloop, "done at:", ctime())
lock.release()
def main():
print("starting at:", ctime())
locks = []
nloops = range(len(loops))
for i in nloops:
lock = _thread.allocate_lock()
a = lock.acquire()
locks.append(lock)
for i in nloops:
_thread.start_new_thread(loop, (i, loops[i], locks[i]))
for i in nloops:
while locks[i].locked(): pass
print("all DONE at:", ctime())
if __name__ == "__main__":
main()
在官方参考中,我看到了"only one thread at a time can acquire a lock"。 锁是为了保证一次只执行一个线程,不是吗? 现在我有两个问题。
- 为什么可以生产多把锁?
- 为什么两个线程可以同时获取一个锁?
关于 (1),您可以根据需要创建任意数量的锁——大概需要它们来保护多线程环境中的不同共享可变资源(个人而言,我认为具有多线程共享的编程环境许多可变资源是程序员过世后去的地方,如果他们过着非常糟糕的生活)。
Re (2), "Why can two thread acquire each lock at the same time" -- 他们绝对不能,这就是锁的全部意义:每个锁最多只能由一个线程持有在任何给定时间。锁定对象是使用操作系统为此目的提供的任何底层资源以这种方式构建的。