@线程同步
#多线程中总会有一些特定的函数或代码块不希望(或不应该)被多个线程同时执行。
#当线程间共享全局变量,多个线程对该变量执行不同的操作时,该变量最终的结果可能是不确定的
#临界区:指的是一个访问共用资源的程序片段。
@锁
#有两种状态:锁定、未锁定。
#两个函数:获得锁(Lock.acquire)、释放锁(Lock.release() )
#两种锁:threading.Lock()、threading.RLock()
@threading.Lock()和threading.RLock()的区别
#threading.Lock() 加载线程的锁对象,是一个基本的锁对象,一次只能一个锁定,其余锁请求,需等待锁释放后才能获取
#threading.RLock() 多重锁,在同一线程中可用被多次acquire。如果使用RLock,那么acquire和release必须成对出现, 调用了n次acquire锁请求,则必须调用n次的release才能在线程中释放锁对象
@锁的例子
#!/usr/bin/env python
# -*-coding:utf-8 -*-
import threading
import time
num = 0
def sum_num(i):
global num
time.sleep(1)
num += i
print(num)
print("%s thread start!" % (time.ctime()))
try:
lock = threading.RLock()
list = []
for i in range(6):
t = threading.Thread(target=sum_num, args=(i,))
list.append(t)
t.start()
for threadinglist in list:
threadinglist.join()
except KeyboardInterrupt as e:
print("you stop the threading")
print('%s thread end!'%(time.ctime()))