happens-before
程序次序,传递,volatile,lock的4个规则
ReentrantLock: thread A,B(A修改变量,B读取变量)
A unlock时需修改volatile state,B lock时需读取volatile state
A 修改 happens-before A write volatile happens-before B read volatile happens-before B 读取
实现:volatile的写入将非volatile变量也写入主存了,和一些其他流程见volatile分析,其它cpu读取非volatile变量也要去主存读。
synchronized:
A 修改 happens-before A unlock happens-before B lock happens-before B 读取
实现:unlock将工作内存所有变量写入主存了,lock开始将清空工作内存。
两者实现可见性十分相似。
大部分happens-before 都带有cache写入和cache invalidate,来保证变量可见性。试想(A修改 happens-before A interrupt B happens-before B检测到自己被中断)是怎么实现的?