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)
  • 相关阅读:
    北京六环附近及往内的可驾驶道路网络(路网graph为连通图)
    OSM数据处理-python工具包
    小程序踩坑
    小程序基本配置
    JavaScript 基础(四):Array
    MYSQL--慎用group_concat()
    真正高效的SQLSERVER分页查询
    PhpStorm Git 操作
    linux 查看当前目录文件的大小
    @PostConstruct和@PreDestroy的使用说明
  • 原文地址:https://www.cnblogs.com/wang-can/p/3581028.html
Copyright © 2011-2022 走看看