zoukankan      html  css  js  c++  java
  • 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()
        
    
  • 相关阅读:
    HDU5772 (最小割)
    HDU 4971 (最小割)
    暑期集训个人赛1
    HDU 5644 (费用流)
    HDU5619 (费用流)
    暑假集训热身赛
    构建之法阅读笔记05
    找小水王
    找水王
    Runner站立会议之个人会议(冲刺二)
  • 原文地址:https://www.cnblogs.com/bin-l/p/8553818.html
Copyright © 2011-2022 走看看