zoukankan      html  css  js  c++  java
  • 互斥锁和死锁

    #!/usr/bin/env python
    # encoding: utf-8  
    # Date: 2018/6/18

    # # 死锁
    # from threading import Thread,Lock
    # import time
    # mutexA = Lock()
    # mutexB = Lock()
    #
    #
    # class MyThread(Thread):
    #     def run(self):
    #         self.f1()
    #         self.f2()
    #
    #     def f1(self):
    #         mutexA.acquire()
    #         print('%s 拿到了A锁' % self.name)
    #         mutexB.acquire()
    #         print('%s 拿到了B锁' % self.name)
    #         mutexB.release()
    #
    #         mutexA.release()
    #
    #     def f2(self):
    #         mutexB.acquire()
    #         print('%s 拿到了B锁' % self.name)
    #         time.sleep(0.1)
    #
    #         mutexA.acquire()
    #         print('%s 拿到了A锁' % self.name)
    #         mutexA.release()
    #
    #         mutexB.release()
    #
    #
    # if __name__ == '__main__':
    #     for i in range(10):
    #         t = MyThread()
    #         t.start()

    # 互斥锁只能acquire一次
    # from threading import Thread,Lock
    #
    # mutexA = Lock()
    #
    # mutexA.acquire()
    # mutexA.release()

    # 递归锁:可以连续acquire多次,每一次acuqire一次计数器加1,只有计数为0时,才能被抢到
    from threading import Thread,RLock
    import time

    mutexB = mutexA = RLock()


    class MyThread(Thread):
        def run(self):
                self.f1()
                self.f2()

        def f1(self):
            mutexA.acquire()
            print('%s 拿到了A锁' % self.name)
            mutexB.acquire()
            print('%s 拿到了B锁' % self.name)
            mutexB.release()

            mutexA.release()

        def f2(self):
            mutexB.acquire()
            print('%s 拿到了B锁' % self.name)
            time.sleep(0.1)

            mutexA.acquire()
            print('%s 拿到了A锁' % self.name)
            mutexA.release()

            mutexB.release()


    if __name__ == '__main__':
        for i in range(10):
            t = MyThread()
            t.start()

  • 相关阅读:
    大数据架构师技能图谱
    2018年,Java程序员转型大数据开发,是不是一个好选择?
    如何将java web项目上线/部署到公网
    Flume调优
    Spark流处理调优步骤
    zookeeper的WEB客户端zkui使用
    HBase各版本对Hadoop版本的支持情况
    java 代码实现使用Druid 链接池获取数据库链接
    安装postgreSQL出现configure: error: zlib library not found解决方法
    修改postgres密码
  • 原文地址:https://www.cnblogs.com/fmgao-technology/p/9196683.html
Copyright © 2011-2022 走看看