【发布时间】:2017-11-02 09:19:24
【问题描述】:
我需要一个位掩码,它可以超过 64 位,可以由 Java 原子操作。
“明显”的候选者(两者都需要引入某种锁定方案)是:
- 重新分配为固定大小的连续区域
- 由链接字组成的断裂位掩码(“线程安全
BitSet”)
有没有关于这个问题的论文? (不必是特定于 Java 的。)
【问题讨论】:
-
如果使用
longs 的数组会怎样?为特定位找到正确的long真的必须通过翻转/检查该位是原子的吗?我无法想象一个重要的用例。如果一个位的检查/翻转是原子的,那么想要接触同一个位的两个线程将执行相同的计算来确定该位的位置,然后才尝试执行原子动作。有问题吗? -
@Malt 一个“
longs 数组”是基本上是“作为固定大小的连续区域重新分配”。并且您假设位掩码操作仅更改一个位。但是,我可能必须翻转多个,并且所有这些都应该在同一个原子操作中翻转。或者我可能需要检查位于不同longs 中的位,检查应该是原子操作。 -
@User1291 使用
longs 的数组并使用锁来实现原子性是否存在问题?我不知道任何关于这方面的论文,我无法想象如果有的话他们会涵盖什么,这对我来说听起来很简单。 -
@xtratic 好吧,“使用锁实现原子性”主要是问题所在。太贵。而且我不知道是否有人没有检查过 longs 数组提供的空间局部性是否值得扩大复制开销。
标签: java memory-management synchronization locking bitmask