解决线程中使用线程锁

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

解决方案:使用线程锁

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

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

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

相关推荐
BoBoZz197 分钟前
PolyDataToImageDataStencil如何用多边形数据作为“模板”来裁剪或屏蔽图像数据
python·vtk·图形渲染·图形处理
zhousenshan8 分钟前
Python单例模式实现方法
python·单例模式
爱笑的眼睛119 分钟前
深度解析现代OCR系统:从算法原理到高可用工程实践
java·人工智能·python·ai
rannn_11110 分钟前
【SQL题解】力扣高频 SQL 50题|DAY1
后端·sql·题解
BoBoZz1913 分钟前
PerlinNoise Perlin噪声(PerlinNoise)隐式函数构建模型并渲染
python·vtk·图形渲染·图形处理
kkoral14 分钟前
基于MS-Swift 为 Qwen3-0.6B-Base 模型搭建可直接调用的 API 服务
python·conda·fastapi·swift
IT_陈寒15 分钟前
JavaScript性能优化:7个V8引擎内部原理帮你减少90%内存泄漏的实战技巧
前端·人工智能·后端
PythonFun15 分钟前
WPS多维表结合Python实现在线批量查词
开发语言·python·wps
JaguarJack22 分钟前
当遇见 CatchAdmin V5-模块化设计重新定义 Laravel 后台开发
后端·php
爱笑的眼睛1124 分钟前
深入 Django 表单 API:从数据流到高级定制
java·人工智能·python·ai