는 자바에서 "비교 및 스왑"의 정확성에 작은 의심은 CAS (비교 및 스왑)가 완벽하게 작동합니까?
난 아직 예를
를 들어,이 CAS는 손실 값에 기회가 생각하고 있기 때문에 공유 자원 S를 할 수 있습니다, 값이 5
이고 스레드가 T1 및 T2 인 경우 값을 각각 새 값 6 및 7로 업데이트하려고합니다.
1. T1이 값을 5와 비교하여 같음을 찾았습니다. 2. T2가 값을 5와 비교하여 같음 3. T2는 7 으로 값을 설정합니다. 4. T1은 값을 6으로 설정합니다.
여기서 T1은 해당 시간에 5 인 이전 전류 값을 읽으므로 손실 된 T2로 설정된 값이 손실됩니다.
는 사람이에 설명해 드리겠습니다 당신이 때문에 CAS의 자성에 일어날 수 없습니다 설명 무엇
[AtomicInteger.compareAndSet] (https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html#compareAndSet (int, % 20int) . 또한 실제로 실패 할 수있는 'weakCompareAndSet'도 있습니다. –