死锁 信息量

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

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

出现死锁的问题的两种问题的情况
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()

 

转载于:https://www.cnblogs.com/tangda/p/10519540.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值