在这个关于Disruptor(一个并发框架)的视频中,提到了Java的Atomic*类(例如AtomicLong)的lazySet方法.根据文档,此方法"最终设置为给定值".
有没有人知道实现这个的底层机制是什么(特别是在Windows上的x86,如果这是相关的).它不能是InterlockedExchange(),因为这会设置值并确保在返回之前刷新缓存行,如果我没有弄错的话.
在Bug 6275329中找到了该实现的描述:
语义是保证写入不会与任何先前的写入一起重新排序,但可以与后续操作一起重新排序(或者等效地,可能对其他线程不可见),直到发生其他一些易失性写入或同步操作。
...
对于那些喜欢将这些操作视为常见多处理器上的机器级屏障的人来说,lazySet 提供了一个 前置的存储-存储屏障(在当前平台上要么是无操作,要么非常便宜),但没有存储-加载屏障(这通常是易失性写入的昂贵部分)
归档时间: |
|
查看次数: |
2266 次 |
最近记录: |