Python 线程同步

#-*-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()
    
相关文章
相关标签/搜索