gpt4 book ai didi

python - Python _thread 模块中的 Lock 是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:21 25 4
gpt4 key购买 nike

我读过《Core Python Applications Planning》,其中编写了这段代码。

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()

在官方引用资料中,我看到“一次只有一个线程可以获得锁”。锁是为了保证一次只有一个线程执行,不是吗?现在我有两个问题。

  1. 为什么可以生产多把锁?
  2. 为什么两个线程可以同时获取每个锁?

最佳答案

关于(1),您可以根据需要创建任意数量的锁——大概需要它们来保护多线程环境中的不同共享可变资源(就我个人而言,我认为具有许多线程共享许多可变资源的编程环境)如果程序员过着非常糟糕的生活,那么资源就是程序员去世后去的地方)。

关于(2),“为什么两个线程可以同时获取每个锁”——它们绝对不能,这就是锁的全部内容:每个锁可以被持有任何给定时间最多一个线程。锁对象是使用操作系统为此目的提供的任何底层资源以这种方式构建的。

关于python - Python _thread 模块中的 Lock 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28522838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com