【发布时间】:2014-01-02 19:42:25
【问题描述】:
我正在考虑实现一个无锁循环数组。一个问题是以无锁方式维护头和尾指针。我想到的代码是:
int circularIncrementAndGet(AtomicInteger i) {
i.compareAndSet(array.length - 1, -1);
return i.incrementAndGet();
}
然后我会做这样的事情:
void add(double value) {
int idx = circularIncrementAndGet(tail);
array[idx] = value;
}
(请注意,如果数组已满,旧值将被覆盖,我可以接受)。
有人认为这种设计有问题吗?我怀疑可能存在我没有看到的比赛条件。
【问题讨论】:
标签: java lock-free circular-buffer