解决线程中使用线程锁

问题:多线程操作同一个对象,利用锁保证数据操作的原子性

解决方案:使用线程锁

简要说明:线程锁本质上就是添加一个公共状态量,当线程拿到状态量后,则继续执行,否则就等待

扩展1:自己实现这个功能其实也很方便,可以创建一个队列,里边只塞一个值,每一个添加锁的线程,都去queue.get()值,拿到值会继续往下执行,否则等待,拿到值的等运行结束后,再往队列里queue.put()一个值即可。这里利用了队列本身的特性,当队列里没有值时,队列会处于阻塞状态。等到队列里有值时,会第一时间将值取出

扩展2:添加一个公共变量lock=1。当有线程拿到这个公共变量后,立即将lock值赋值为0,在条件中判断当lock为1时,继续执行,否则阻塞。拿到1值后的线程执行无再将值赋为1即可。另外一个线程逻辑可能会复杂一些,需要隔一段时间取一次lock值进行判断(心跳模式)。理论上讲,这种方式存在一定的隐患,没有很建议。

相关推荐
计算机学姐20 分钟前
基于python+django+vue+MySQL的酒店推荐系统
开发语言·vue.js·后端·python·mysql·django·pip
夜雪一千27 分钟前
python使用xpath获取html中的所有链接
开发语言·python·html
2301_7969821429 分钟前
requests-html的详细使用方法
前端·python·html
人生三醒七分醉34 分钟前
pyspark 安装记录
python
GoppViper44 分钟前
golang学习笔记17——golang使用go-kit框架搭建微服务详解
笔记·后端·学习·微服务·golang·编程语言·go-kit
爆更小小刘1 小时前
Python基础语法(1)上
开发语言·python
wyk123_0461 小时前
pandas 生成excel多级表头
python·excel·pandas
苍穹之跃1 小时前
python之协程
开发语言·前端·python
gochanTao1 小时前
Python中 BeautifulSoup和Selenium 定位元素和获取元素值的方法
python·selenium·beautifulsoup
ks胤墨1 小时前
本地部署轻量级web开发框架Flask结合内网穿透公网环境访问管理界面
前端·python·flask