#-*-coding:utf-8-*-
'''如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,
需要对多个线程进行同步。
线程同步所使用的的方法:
Lock
RLock
以上两个对象,均有acquire和release方法,对于每次只允许一个线程操作的数据可以
将其放在acquire和release方法之间.
Lock:如果一个县城连续两次进行acquire操作,如果第一次acquire之后没有release,
则第二次acquire将挂起线程,导致Lock永远不会release,导致死锁。
Rlock:允许一个线程所赐acquire,其内部通过counter变量维护线程acquire次数,并且
在每次acquire操作都有一个release操作对应,所有release操作完成后其余对象才能申请Rlock。
'''
#线程同步的演示
import threading
mylock=threading.RLock()
num=0
class MyThread(threading.Thread):
def __init__(self,name):
threading.Thread.__init__(self,name=name)
def run(self):
global num
while True:
mylock.acquire()
print("%s locked,Number:%d"%(threading.current_thread().name,num))
if num>4:
mylock.release()
print("%s released,Number:%d"%(threading.current_thread().name,num))
break
num+=1
print('%s released,Number:%d'%(threading.current_thread().name,num))
mylock.release()
if __name__=="__main__":
thread1=MyThread('线程1')
thread2=MyThread('线程2')
thread1.start()
thread2.start()