多线程操作共享资源(如全局变量)原理
CPU对变量的计算分为三个步骤:
1. 从内存读取变量到寄存器(如add寄存器)
2. 将读取到的变量进行计算
3. 将寄存器中计算的值写入内存
如有两个线程(线程1和线程2)对共享资源(全局变量)a=0进行自增操作(a++),可能出现如下情况:
线程1进行a++时,会将变量a读取寄存器,在对变量a进行计算的时候,cpu分配给线程1的时间片到了,这时线程1将阻塞,a = 0,cpu会将变量的值和状态等存起来(供其再次获得时间片使用);
这时线程2将运行,cpu给线程2的时间片足够将a++操作执行完(即从内存读取变量到寄存器、将变量加1、再将1写入到a的地址中),现在a=1,线程2结束;
这时线程1有获得时间片,从阻塞的地方继续执行(即将变量a加1、再将1写入a的地址),这样原先a = 1被线程1重新赋值为1
分类:
linux / linux线程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具