http://ifeve.com/concurrency-visibility/
这个有人看了吗?关于volatile、并发安全☞可见性的文章
只要我修改一段代码,加不加volatile,其结果都是一样的,是为什么?
while (!getStop()) {
i++;
sleep(); // 休眠1s
}
给出两个观点:
1. 由于频繁访问 stop
,所以CPU会把该变量一直放到缓存区域,加上volatile会把数据刷回内存;然而如果加上sleep()
,就不是频繁访问数据,不管怎么访问,都会刷新到内存,所以此时 volatile
就看不到效果了;
2. 这要看 编译器怎么优化;