C
C 语言 POSIX 线程目定义了互斥量,如果临界区的代码更新了全局变量的值,那么在临界区结束之后通过什么机制来保证全局变量的可视性?
个人猜测?
在线程 unlock 的时候刷新自己缓存的值到主存,这样的话由于互斥访问所有的线程看到的都是最新的数据,并且临界区执行完成后的刷新保证后续的线程看到的也是最新的。
但是这样还有问题,就是线程是刷新线程本地的全部缓存到主存?还是只是和临界区相关变量的缓存到主存?具体的底层指令是啥或者原理是啥?
Java
其实 Java 也有一样的问题,搜索给出的答案都是内存屏障、Happen-before 原则,但是没有看到内存屏障、Happen-before 这些东西的底层原理或者伪代码解释~
希望能给出详细的解释或者权威的引用文档~