TestAndSet(TAS) instruction
Test와 Set을 한번에 수행하는 기계어
기계어이므로 실행중 interrupt를 받지 않음을 보장한다(선점되지 않음)
여전히 busy waiting 방식이라 비효율적이란 단점이 있다.
TAS명령어
인수로 받은 값을 true로 바꾸고, 리턴값은 바꾸기 전의 인수값을 그대로 리턴한다
lock변수는 false로 초기화 되어 있으므로, 첫번째 while문에 false가 들어가므로
while문 탈출 후 임계지역에 진입한다. TAS에 의해 lock은 true가 된 상태
다른 프로세스가 임계지역에 들어가려 시도할땐 lock이 true인 상태이므로 임계지역 진입이 불가능하다.
진입한 이후 lock은 false가 되므로, 다른 프로세스가 임계지역 진입 가능하다
하지만 프로세스가 3개 이상일 경우 Bounded waiting조건을 위배한다.
1번이 일하고있고, 2번 3번이 대기하고 있을때,
1번이 일을 마쳤을 때 2번이 들어갈지, 3번이 들어갈지 알 수 없기 때문에
운이 나빠 2번이 계속 새치기 당한다면 영원히 기다리게 될 수도 있기 때문이다.
이를 해결하기 위해 다음과 같은 방식이 제시되었다.