import thread
from time import sleep
import time
loops = [4, 2]
def loop(nloop, nsec, lock):
print 'start loop', nloop, 'at:', time.ctime()
sleep(nsec)
print 'loop', nloop, 'done at:', time.ctime()
lock.release()
def main():
print 'starting at:', time.ctime()
locks = []
nloops = range(len(loops))
for i in nloops:
lock = thread.allocate_lock() # 标记1
lock.acquire()
locks.append(lock)
for i in nloops:
thread.start_new_thread(loop, (i, loops[i], locks[i])) # 标记2
for i in nloops:
while locks[i].locked(): pass
print 'all end', time.ctime()
main()
以上代码是python核心编程3里面的,在我的注释“标记1”这里,分配了锁对象,接着获取了锁对象,并把锁加入locks里面。
注释“标记2”通过thread模块去创建派生线程,只是把一个锁传给函数,并没有和线程有什么交互,函数运行完,还释放了自己的锁对象。
我看代码给我的感觉就是准备了两个锁,然后创建进程,然后完事了。
我觉得应该有一个过程,指明我的锁是给哪个进程的吧?代码中已经准备好锁池locks了,应该在创建派生线程的时候,拿出一个锁加到这个线程上,但是我没看出这么一个过程。应该如何来理解?是不是分配了锁对象,例如我这里分配了两个,然后创建的线程就自动得到了锁,如果创建第三个的时候就拿不到锁了?