线程安全问题

一.由于线程之间是"抢占式"执行的过程,这些线程谁先执行谁后执行,不能确定,完全取决于cpu的调度,所以这也是线程不安全的罪魁祸首.
二.多个线程同时修改统一个资源
我们哪count++这个例子解释一下,count++这个操作就是针对内存中的count变量进行修改操作,修改操作一般都是cup来完成的,分为三个步骤:
1.先把内存中的数据读取到cpu的寄存器中.
2.针对寄存器中的内容,通过add这样的指令+1操作,操作的结果仍然保存在寄存器中.
3.把寄存器中的数据,写回到内存中去.
绘图描述以下可能发生线程不安全的原因:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到结果并不是正确的.
三.修改操作不是原子性的.
如果count++的三个操作被打包成一个整体,禁止相互穿插执行,也就保证线程安全.
四.内存可见性
其实和刚才i++,的过程一样,两个线程同时操作同一块内存,比如,一个读,一个写,写操作的线程进行了修改,读线程读取到也可能是修改之前的结果,也可能是修改之后的结果,不确定因素太多,也会有线程安全的问题存在.
五.指令重排序
为了让程序跑的更快,编译器调整了程序的执行顺序(再不改变逻辑的情况下).所以在多线程情况下也会有线程安全的问题存在.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值