84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
下面这个方法,我不理解
public final int getAndIncrement() { for (;;) { int current = get(); int next = current + 1; if (compareAndSet(current, next)) return current; } }
为何要循环直到成功?如果这期间有另外的线程更改了value,导致compareAndSet()返回false,那这就表面已经不是原子性了吧,还继续重复有啥意义?
认证0级讲师
쓰기 작업이 덮어쓰여지지 않고 멀티스레딩에서 계산 오류가 발생하지 않는다는 점만 알고 싶을 뿐입니다. 원하는 만큼 원자성을 달성하려면 잠금만 사용할 수 있지만 이렇게 하면 됩니다. 비효율적이다.
쓰기 작업이 덮어쓰여지지 않고 멀티스레딩에서 계산 오류가 발생하지 않는다는 점만 알고 싶을 뿐입니다. 원하는 만큼 원자성을 달성하려면 잠금만 사용할 수 있지만 이렇게 하면 됩니다. 비효율적이다.