猛禽的编程艺术 2020-06-08
锁既是给公共资源增加限制。如果是死锁的必须满足以下四个条件,互斥,不可剥夺,请求与保持, 循环等待,只要系统出现死锁,这四个条件必须成立。
信号量,有时被称为信号灯。是在多线程环境下使用的一种设施,他负责协调各个线程,以保证他们能够正确、合理的使用公共资源。
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。
# ### 信号量 Semaphore
from threading import Semaphore, Thread
import time
def func(i, sem):
with sem:
print(i)
time.sleep(10)
sem = Semaphore(6)
for i in range(20):
Thread(target=func, args=(i, sem)).start()# 枷锁
import time, threading
count=0 #声明全局变量
lock=threading.Lock() #申请一把锁
def lajifenlei():
global count #引用全局变量
lock.acquire() #加锁
count+=1
lock.release() #释放锁
time.sleep(1)
print(count)
for i in range(10):
th = threading.Thread(target=lajifenlei,) #声明线程数
th.start() #启动线程
while threading.activeCount()!=1:
pass