Bin.L

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  13 随笔 :: 0 文章 :: 0 评论 :: 0 引用
#-*-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()
    

 

posted on 2018-03-13 09:48  Bin.L  阅读(...)  评论(...编辑  收藏