zoukankan      html  css  js  c++  java
  • Python 线程(二):简单锁实现线程同步

    Python中有两种锁,一个锁是原始的锁(原语), 不可重入,而另一种锁则是可重入的锁即递归锁。而是thread模块中,只提供了不可重入的锁,而在threading中则提供这两种锁。

    可重入:当一个线程拥有一个锁的使用权后,再次获取锁的使用权时,不会阻塞,会立马得到使用权,则原始锁的话,则不行,会阻塞。

    方法一:thead的不可重入锁

      

    import thread
    import time
    
    lock = thread.allocate_lock()
    
    def Count(id):
        global num;
    
        while True:
            lock.acquire()
            if num <= 10:
                print "Thread id is : %s     The num is %s
    " % (id, str(num))
                num = num + 1
            else:
                break
            lock.release()
        else:
            thread.exit_thread()
    
    if __name__ == "__main__":
        num = 1
        thread.start_new_thread(Count, ('A',))
        thread.start_new_thread(Count, ('B',))
    
        time.sleep(5)
    

      

    方法二:theading的Lock(不可重入锁)

    import threading
    import time
    
    lock = threading.Lock()
    
    def Count(id):
        global num;
    
        while True:
            lock.acquire()
            if num <= 10:
    
                print "Thread id is : %s     The num is %s
    " % (id, str(num))
                num = num + 1
            else:
                break
            lock.release()
    
    if __name__ == "__main__":
        num = 1
        t1 = threading.Thread(target=Count, args=('A', ))
        t2 = threading.Thread(target=Count, args=('B', ))
    
        t1.start()
        t2.start()
    
        time.sleep(5)
    

      方法三:threading的RLock(可重入)

    import threading
    import time
    
    lock = threading.RLock()
    
    def CountNum(id):
        global num
        
        lock.acquire()
        
        if num <= 10:
            print "Thread id is : %s     The num is %s
    " % (id, str(num))
            num = num + 1
            CountNum(id)
    
        lock.release()
    
    if __name__ == "__main__":
        num = 1
        t1 = threading.Thread(target=CountNum, args=('A'))
    
        t1.start()
    
        time.sleep(5)
  • 相关阅读:
    LBS 经纬度定位
    LBS 经纬度定位
    GPS定位基本原理
    GPS定位基本原理
    Android Studio 之 启动和停止服务
    Android Studio 之 启动和停止服务
    【算法】最短路——两点最短总权和
    【算法】最短路——两点最短总权和
    【郑轻】[1743]解方程
    【郑轻】[1743]解方程
  • 原文地址:https://www.cnblogs.com/wang-can/p/3581028.html
Copyright © 2011-2022 走看看