atomic : uninterruptible unit
machine마다 명령이 다르므로, 추상화된 다음 두 instruction들을 통해 설명한다.
test_and_set(), compare_and_swap() instructions
test_and_set()함수의 특징 : atomic하다. 즉, 만약에 서로 다른 core에서 동시에 실행된다면 실제로 동시에 실행되지 않고 특정한 순서대로 실행하게 된다.
만약 machine이 atomic한 test_and_set()함수를 지원한다면, boolean변수 lock을 선언해서 false상태로 놓고 mutual exclusion을 구현할 수 있다.
boolean waiting[n];
int lock;
test_and_set()과 compare_and_swap() : computer architecture에서 자세히 배울 수 있다.
void increment(atomic_int *v)
{
int temp;
do {
temp = *v;
}
while (temp != compare_and_swap(v, temp, temp + 1));
}