解决线程中使用线程锁

server/2024/10/18 16:54:32/

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

解决方案:使用线程锁

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

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

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


http://www.ppmy.cn/server/108189.html

相关文章

使用Jmeter进行接口压力测试

Jmeter是一款压力测试工具,广泛应用于测试后台接口在高并发情况下的响应耗时,这篇文章记录使用Jmeter测试后端接口的步骤 创建测试计划 点击name,修改名称,代表测试项目 配置线程组 点击 order-service - Add – Threads(Users…

一刷代码随想录(图论9)

dijkstra(堆优化版)精讲 题目即小明参会题 解法:若遇到稀疏图可以考虑处理边而非处理节点,使用邻接表来存储边,使用小顶堆对边进行排序,直接取出最小的边即可,然后从当前点出发遍历剩余数组&a…

Redis入门篇 - CentOS 7下载、安装Redis实操演示

文章记录了在CentOS 7上,通过源码的形式,下载安装Redis的操作过程 进入要安装Redis的目录 cd /usr/local下载源码压缩包 wget https://download.redis.io/redis-stable.tar.gz # 不同版本可能地址不同下载完成后,使用ll命令检查,可以看到下载…

4.4 bps 拯救小哈

题目&#xff1a; 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h>//只有一个路线&#xff0c;没有深度优先的分支&#xff01;&#xff01;&#xff01;//节点法创建顺序队列 //节点 typedef struct note {int x;int y;int s; …

Java在项目中实现登录密码加密传输

1安装依赖 npm install jsencrypt2编写jsencrypt.js import JSEncrypt from jsencrypt/bin/jsencrypt.min// 密钥对生成 http://web.chacuo.net/netrsakeypairconst publicKey MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n nzkXSOVOZbFu/TJhZ7rFANe…

如何在忘记密码或 ID 的情况下解锁 iPhone 15

您是否曾经因为忘记了 iPhone 密码而陷入困境&#xff0c;或者您是否多次错误地输入了屏幕时间密码并发现自己被锁定在 iPhone 之外&#xff1f; 被锁定和拒绝访问您的 iPhone 可能很常见&#xff0c;尤其是在您尚未配置 Face ID 的情况下。或者&#xff0c;如果 Face ID 无法正…

比较一下React与Vue

React和Vue都是现代前端开发中广泛使用的JavaScript库&#xff0c;它们各自具有独特的特点和优势。以下是对React和Vue的比较&#xff1a; 1. 开发模式和范式 React&#xff1a; 本质是一个前端组件框架&#xff0c;由后端组件演化而来。 鼓励将UI分解为小的、独立的、可复用…

工业感知技术介绍:传感器与感知技术的实际应用

传统工业系统面临数据获取不及时、传输处理效率低、设备状态监控不足、环境监测不全面、数据孤岛以及生产优化难以实现等难点和痛点问题。这些问题限制了生产效率的提升和安全保障的实现。 随着工业4.0的兴起和工业物联网(IIoT)的快速发展&#xff0c;工业生产对高效、精准的自…