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)
  • 相关阅读:
    【转帖】asp.net mvc与webform区别
    [学习jquery]深入了解jquery(1)jquery对象
    windows ce 4.2/5.0/6.0/windows mobile设备直接连接PC端的SQLserver
    dotNet dispose 和 close的区别
    简易快速理解 ERP
    互联网盈利模式77种创新 [转]
    软件开发的基础知识[1]
    什么是 SHTML
    ASP.NET 2.0:弃用 DataGrid 吧,有新的网格控件了![msdn]
    主页制作五十式[好帖就要转]
  • 原文地址:https://www.cnblogs.com/wang-can/p/3581028.html
Copyright © 2011-2022 走看看