问答详情
源自:4-3 volatile不能保证原子性(中)

B线程工作空间何值的问题

在之前讲到可见性时,说,值变更由工作空间->主内存->工作空间 一步不能缺。

但这节课说,B线程将number更新为6并同步主内存后,A线程的工作空间为何还是5?不是volatile保证了可见性了吗?

我的理解是,A工作的工作空间已经变成了6,但A线程之前已经读取过数据了,所以继续沿用之前的操作,是5.不知道我的理解是否正确。

提问者:王小明3 2017-05-07 15:57

个回答

  • ricklove
    2017-05-14 15:38:38

    你根本就不理解。。这个volitate,只对单个操作有效,对i++ 或者其他多步的操作,根本保证不了线程安全

  • ricklove
    2017-05-10 19:57:04

    区别就是当voliate对象要去操作工作空间的变量时,会先把工作空间的变量清空,去主存读一下,操作完之后,会先将操作后的数据写到主存里,这个过程是强制的

  • ricklove
    2017-05-09 17:26:20

    这个主内存->工作空间,是你读数据的时候,自己去主内存里读的,不是主内存的数据实时的更新到这个工作空间

  • ricklove
    2017-05-09 17:24:55

    不是你这么理解的,A工作空间的数据还是5,