学习版本3.5.2
Lock类:一个线程对资源进行加锁操作之后其它线程就必须等它释放锁之后才能对该资源进行操作。acquire()与acquire_lock()都是加锁操作,release()与release_lock()都是释放锁操作,locked()与locked_lock()都是查询当前锁的状态。
RLock类:线程对资源进行加锁操作后,该线程还能继续对该资源加锁,加锁和释放锁的数量需要是一样的。acquire()是加锁操作,release()是释放锁操作。最大的作用就是在递归调用的时候避免死锁。
import threading
if __name__ == "__main__":
lock = threading.Lock()
#lock = threading.RLock()使用这句的时候下面就不会死锁
lock.acquire()
lock.acquire()#死锁
lock.release()
lock.release()
不用锁的时候
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2
import threading
import time
def test(num):
global value
#lock.acquire()
print(num)
value += num
print(value)
#lock.release()
if __name__ == "__main__":
threadlist = []
#lock = threading.Lock()
value = 10
for i in range(5):
t = threading.Thread(target=test,args=(i,))
threadlist.append(t)
for t in threadlist:
t.start()
print("main")
运行结果
0
10
1
2
11
main
13
3
16
4
20
用锁的情况
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2
import threading
import time
def test(num):
global value
lock.acquire()
print(num)
value += num
print(value)
lock.release()
if __name__ == "__main__":
threadlist = []
lock = threading.Lock()
value = 10
for i in range(5):
t = threading.Thread(target=test,args=(i,))
threadlist.append(t)
for t in threadlist:
t.start()
print("main")
运行结果
0
10
1
11
2
13
3
16
4
20
main