#-*-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()