Old*_*eon 6 java multithreading synchronization shared-memory
在最近的回答中,我建议可以在包含我们需要的变量的对象上实现volatileby 的功能(asker无法访问代码中的变量).synchronizingvolatile
这让我觉得我实际上不需要阻塞包含对象,我只需要实现内存屏障.由于synchronized实现了同步和内存屏障,如果我只需要内存屏障(在这种情况下),实际上更好的是synchronized(new Object())用来实现我的内存屏障并确保锁永远不会争用?
除了@assylias 的非常好的观点之外,还要考虑到synchronized规范没有实现内存屏障。这只是在当今典型的 CPU-内存架构上实现的方式。该规范仅保证两个线程获取相同锁时会发生什么。
无论如何,如果您不关心规范,而只关心现实世界的实现,那么为什么不引入您自己的volatile变量并在需要内存屏障时简单地写入它呢?只要我们讨论的是您的想法所隐含的一组受约束的架构,您写的内容 并不重要。volatilesynchronized(new Object())
| 归档时间: |
|
| 查看次数: |
479 次 |
| 最近记录: |