多线程修改一份数据时需要用到线程锁,以防止数据修改出错
#-*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"
import threading
import time
num = 0
t_obj = []
lock = threading.Lock() #声明一个锁并赋给一个变量
def MyThread(n):
lock.acquire() #给线程加锁
global num
time.sleep(0.5)
num +=1
lock.release() #释放给线程锁
for i in range(20):
t = threading.Thread(target=MyThread,args=(i,))
t.start()
t_obj.append(t)
for t in t_obj:
t.join()
print("num:",num)
递归锁
递归锁就是锁中有锁,一把锁套着一把锁
# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"
import threading
num = 0
num2 = 0
lock = threading.RLock() #声明一个递归锁
def Lock_1():
print("---This is Lock_1---")
lock.acquire()
global num
num += 1
lock.release()
return num
def Lock_2():
print("---This is Lock_2---")
lock.acquire()
global num2
num2 += 1
lock.release()
return num2
def Lock_3():
lock.acquire()
print("---This is Lock_3---")
Run_Lock_1 = Lock_1()
print("---Between Lock_1 and Lock_2---")
Run_Lock_2 = Lock_2()
lock.release()
print(Run_Lock_1,Run_Lock_2)
for i in range(10):
t = threading.Thread(target=Lock_3)
t.start()
while threading.active_count() != 1:
print(threading.active_count())
else:
print("---All Thread Have Done---")
print(num,num2)