下面这个方法,我不理解
public final int getAndIncrement() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return current;
}
}
为何要循环直到成功?如果这期间有另外的线程更改了value,导致compareAndSet()返回false,那这就表面已经不是原子性了吧,还继续重复有啥意义?
Ia hanya mahu menyedari bahawa operasi tulis tidak akan ditimpa, dan tidak akan ada ralat pengiraan dalam berbilang benang Jika anda ingin mencapai atomicity sebanyak yang anda mahu, anda hanya boleh menggunakan kunci, tetapi ini akan menjadi tidak cekap.