나는 다중 프로그래밍의 예술이라는 책을 읽고 있었다 등이 있다고 책에서 등함수는 어떻게 원자 적이됩니까?
의 get(), getandset()의 compareAndSet(), getandIncrease(), getandIncrease()와 같은 기능을 통해 온 한 위의 모든 함수는 원자 적이며 동의하지만 어떤 함수가 원자 함수가되는 방법에 대한 내 자신의 의문이 생겼습니다.
왜 와 함수는를 얻을 않거나 는 원자 될 비교할? 왜냐하면 그것이 가치를 얻을 때까지 기다려야하기 때문이거나 어떤 조건이 사실이되어서 장벽을 만들어서 원자가 될 때까지 기다리기 때문입니다.나는 이런 식으로 생각하고 있니? 내가 놓친 것이 있습니까?
내가
if (tail_index.get() == (head_index.getAndIncrement())
할 때 원자입니까?
원자는 "불가분"을 의미합니다. 원자 적 조작의 일부는 볼 수 없으며 모든 작업은 한 번에 발생하는 것처럼 보입니다. 귀하의 경우에는 두 가지 get 메소드가 하나로 수행되도록 보장 할 수있는 것이 없으므로 나는 그것을 원자라고 부르지 않을 것입니다. –