线程锁+信号量--day34
"""
----线程锁----
什么时候用锁 当多个进程或多个线程需要同时修改同一份数据时,
可能会造成数据的错乱,所以必须得加锁
"""
from threading import Thread,Lock lock =Lock() a = 100 def task(): lock.acquire() global a temp = a - 1 time.sleep(0.01) a = temp lock.release() ts = [] for i in range(100): t = Thread(target=task) t.start() ts.append(t) for t in ts: t.join() print(a)
"""
----信号量-----
其实也是一种锁,特点是可以设置一个数据可以被几个线程(进程)共享
与普通锁的区别
普通锁一旦加锁 则意味着这个数据在同一时间只能被一个线程使用
信号量 可以让这个数据在同一时间只能被多个线程使用
使用场景,可以限制一个数据被同时访问的次数,保证程序正常运行
"""
from threading import Semaphore,Thread,current_thread import time,random sem = Semaphore(3) # 设置可以背共享的次数 def task(): sem.acquire() print("%s run..." % current_thread()) time.sleep(3) sem.release() for i in range(10): t = Thread(target=task) t.start()