volatile的疑问

《并发编程的艺术》中对volatile读的语义这么描述:
P41:线程从主内存中读取共享变量;
是指线程直接操作主内存?
还是说JMM可以先把主内存的值刷新到本地内存,然后线程再从本地内存中读取?
全部评论
线程都是对工作内存进行操作的。对于主内存和工作内存之间值的传递,volatile有特定的规则,所以让人感觉是直接从主内存中直接取值。
点赞 回复 分享
发布于 2017-08-28 17:52
刷新到本地操作
点赞 回复 分享
发布于 2017-08-28 17:48
刷新到工作内存吧。。没听说过线程可以直接操作主内存的
点赞 回复 分享
发布于 2017-08-28 17:49
这本书拉入黑名单
点赞 回复 分享
发布于 2017-08-28 19:16
读的时候会先把自己线程的本地内存设为无效,再从主线程读取值至本地线程,再从本地线程中读取值,线程通过本地内存与进程内存交互。vo内存语义其实就是在重排序中插入了内存屏障保证读写顺序。
点赞 回复 分享
发布于 2017-08-29 12:10

相关推荐

Git的工作流程通常包括以下几个步骤:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=f818c6d22c98401682f8662612b9e57f克隆(Clone):首先,通过克隆一个远程仓库到本地,创建一个本地仓库的副本。这样可以在本地进行开发和修改。添加和修改(Add and Modify):在本地仓库中进行代码的添加和修改。开发者可以通过添加新文件、修改现有文件或删除文件来进行开发工作。暂存(Stage):将修改的文件添加到暂存区(也称为索引),准备提交到版本库。暂存区相当于一个缓冲区,用于存放即将提交的修改。提交(Commit):将暂存区的修改提交到版本库。每次提交都会生成一个唯一的提交记录,包含了修改的详细信息,如作者、时间戳和提交消息。推送(Push):将本地的提交推送到远程仓库,与团队成员共享代码。推送操作将本地的提交同步到远程仓库,使得其他人可以看到和使用这些修改。拉取(Pull):从远程仓库拉取最新的代码更新到本地仓库。当其他人推送了新的修改到远程仓库时,开发者可以通过拉取操作获取这些更新。合并(Merge):将不同分支的修改合并到一起。当开发者在不同的分支上进行并行开发时,可以使用合并操作将分支的修改合并到主分支或其他分支上。冲突解决(Conflict Resolution):当多个分支对同一文件进行了不同的修改时,可能会发生冲突。开发者需要手动解决这些冲突,选择保留哪些修改或进行修改的合并。这些步骤构成了Git的基本工作流程。通过这个工作流程,开发者可以有效地管理代码的版本、协作开发和跟踪修改历史。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务