原子操作的重要性

原子操作:要么不做,要么一次性做完

非原子操作

 其实ABCD都是对的。

B选项:正常执行,I线程执行2条语句全部执行完毕,再执行II线程重新执行一遍foo函数。

 C选项:先执行I线程foo函数第一行代码,然后跳转执行II线程foo函数,返回后执行foo的后续代码

A选项:I线程中printf函数实际上并不是直接输出,而是把数据放入缓冲区中,因此有可能A线程将打印的2放入缓冲区中,还没来得及输出,这时候B线程打印了3,时间片轮转回来就会后打印2

D选项:a=a+1本身就不是原子操作因此有可能同时进行操作,都向寄存器中加载1进去,然后进行+1后,将2放回内存,因此有可能会打印2和2

 

如果是原子性的操作,就不会有A和D选项正确了!!!

因为,原子性操作的话,a=a+1与printf()必须全部执行完毕才可以被切换到其他进程或线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云的小站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值