• 死锁 信息量


    当你今后在开发一些高并发程序时,很有可能出现线程/进程安全问题

    解决方案只有加锁,但是在使用锁时,很有可能出现死锁问题

    出现死锁的问题的两种问题的情况
    1,对同一把锁调用了多次 acquire导致死锁问题(最low的死锁问题),你应该避免这种写法
     2,你有多把锁,一个线程抢一把锁,要完成任务必须同时抢到所有的锁,这将导致死锁

    如何避免:

    1 能不加锁就不加锁

    2 如果一定要加 要保证锁只有一把

    from threading import Thread
    import time

    #第一种死锁

    lock = Lock()
    lock.acpuire()
    lock.acquire()
    print('over')
    #第二种死锁

    #可以看做一个盘子 一双筷子
    lock1 = Lock()
    lock2 = Lock()

    def task1():

      lock1.acpuire()
      print('%s抢到了盘子”%name)
      time,sleep(1)

      lock2.acpure()

      print("%s 抢到了筷子..."%name)
      print("%s 吃饭了..."%name)
      lock1.release()

      lock2.release()

    def task2(name):

      lock2.acquire()
      print("%抢到了筷子”%name)
      lock1.acqire()
      print("%s吃饭了...."%name)

      lock1.release()
      lock2.release()

    t1 = Thread(target = task1,args = ("渣渣hui")

    t1.start()
    t2 = Thread(target = task2,args = ("大导演”)
    t2.start()

    信息量

    可以控制同一时间有多少线程可以并发的访问

    不是用来处理线程的安全问题

    from threading import Semaphore
    s_lock = Semaphore(3)
    def task():

      s_lock.acquire()
      time.sleep(1)
      print("run...)

      s_lock.release()

    for i in range(20):
      t = Thread(target = task)

      t.start()

  • 相关阅读:
    字符串的问题(strstr和strncpy 水题)
    数一数(KMP+思维)
    栗酱的数列(KMP+思维)
    D. Almost All Divisors(思维)
    E. Two Arrays and Sum of Functions(贪心)
    好位置(思维)
    Just A String(kmp)
    Dubbo简介
    lambda表达式快速创建
    分布式RPC系统框架Dubbo
  • 原文地址:https://www.cnblogs.com/tangda/p/10519540.html
Copyright © 2020-2023  润新知