【多线程】a++

【多线程】a++

a++ 不是原子操作,而是 两步操作:temp = a + 1 a = temp

在多线程操作中,执行 a++ 操作,假如 a = 1; 

如果 线程A读取了 a,并执行了 temp = a +1 ,在它执行 a= temp 之前,线程B 读取了 a,也执行 temp = a + 1,此时线程A 完成了 a = temp,此时 a = 2,但是 线程B在之前读取到的 a = 1, 线程B 完成 a= temp之后, a的最终值为 2. 而在逻辑上 a 做了两次累加,结果值 应该是 3 才对。而在多线程中,这个结果到底是什么,无法确定,现在的结果就属于不一致性。

0 0 vote
Article Rating
Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments