解决线程中使用线程锁

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

解决方案:使用线程锁

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

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

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

相关推荐
ERP老兵_冷溪虎山3 小时前
Python/JS/Go/Java同步学习(第十三篇)四语言“字符串转码解码“对照表: 财务“小南“纸式转码术处理凭证乱码崩溃(附源码/截图/参数表/避坑指南)
java·后端·python
努力的小郑3 小时前
MySQL索引(四):深入剖析索引失效的原因与优化方案
后端·mysql·性能优化
智商偏低4 小时前
ASP.NET Core 中的简单授权
后端·asp.net
练习时长一年4 小时前
搭建langchain4j+SpringBoot的Ai项目
java·spring boot·后端
bobz9654 小时前
Proxmox qemu-server
后端
独行soc4 小时前
2025年渗透测试面试题总结-67(题目+回答)
网络·python·安全·web安全·网络安全·adb·渗透测试
编码浪子4 小时前
趣味学RUST基础篇(异步补充)
开发语言·后端·rust
songroom4 小时前
Rust : 关于Deref
开发语言·后端·rust
bobz9654 小时前
对比 qemu 分析 rust vmm 的成熟度
后端
eybk5 小时前
用python的socket写一个局域网传输文件的程序
服务器·网络·python