多线程加锁


1. 多线程加锁

在多线程加锁的过程中,要注意如下两个核心关键点:

  • 加锁的位置,加锁的位置代表了一旦其中某一线程获取锁后,其他线程就会阻塞到此位置,当加锁的线程执行完毕释放锁后,其他线程会根据阻塞时的位置继续向向执行。
  • 加锁边界处理, 在到达边界时,一旦某一线程完成任务后,其他阻塞的线程就不能继续完成任务,要考虑其他线程要退出任务。
  • 防止死锁,正常情况下cpu执行一个锁要从加锁到释放锁这么一个原子性操作,若在加锁后还为解锁时,就退出任务,此时就变为死锁,自己和其他都一致会阻塞
    举例说明:
import time
from threading import Thread,Lock,currentThread
import logging

FORMAT = "%(asctime)s %(threadName)s %(thread)d %(message)s"
# logging.basicConfig(format=FORMAT,level=logging.INFO)
logging.basicConfig(format=FORMAT,level=logging.INFO)

cups = []
lock = Lock()
def worker(count=10):
    logging.info("I'am working for CPU.")
    flag = False
    while not flag:
        #
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值