C 语言 POSIX 线程目定义了互斥量,如果临界区的代码更新了全局变量的值,那么在临界区结束之后通过什么机制来保证全局变量的可视性?
在线程 unlock 的时候刷新自己缓存的值到主存,这样的话由于互斥访问所有的线程看到的都是最新的数据,并且临界区执行完成后的刷新保证后续的线程看到的也是最新的。
但是这样还有问题,就是线程是刷新线程本地的全部缓存到主存?还是只是和临界区相关变量的缓存到主存?具体的底层指令是啥或者原理是啥?
其实 Java 也有一样的问题,搜索给出的答案都是内存屏障、Happen-before 原则,但是没有看到内存屏障、Happen-before 这些东西的底层原理或者伪代码解释~
希望能给出详细的解释或者权威的引用文档~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.