当一个线程获得锁时,它会执行一个读栅栏,作废所有缓存在thread-local的变量(比如处理器 cache或者寄存器中的),从而使处理器重新在内存中读取synchronized块中用到的变量。类似的,当释放锁时,项城会执行写栅栏——把所有更改过的变量写到内存中。结合互斥和内存栅栏意味着只要程序遵循正确的同步规则(要写一个会被其它线程读的变量,锁之;要读一个会被其它线程写的变量,锁之)每一个线程都能看到的共享变量都有正确的值
时间: 2024-10-12 10:32:43
当一个线程获得锁时,它会执行一个读栅栏,作废所有缓存在thread-local的变量(比如处理器 cache或者寄存器中的),从而使处理器重新在内存中读取synchronized块中用到的变量。类似的,当释放锁时,项城会执行写栅栏——把所有更改过的变量写到内存中。结合互斥和内存栅栏意味着只要程序遵循正确的同步规则(要写一个会被其它线程读的变量,锁之;要读一个会被其它线程写的变量,锁之)每一个线程都能看到的共享变量都有正确的值