os test and lock

process A
count = 0;
lock = true;
do{ while(Testandset(lock))
. . . }while(1);

process B
...
lock = false;
...
lock = false;
...
lock = false;
...

일때, A가 먼저 실행되면 무한루프에 빠지고 B가 먼저 실행되면 false 일때마다 빠져나온다는데, B가 먼저 실행돼도 A의 2번째줄 lock= true ; 조건에서 다시 무한루프에 빠지는 거 아닌가요?


✅최고의 답변✅

네, 제가 이해한 바로는 A와 B의 상황에 대해 설명 드리겠습니다.A가 먼저 실행되면 `Testandset(lock)`에서 `lock` 값이 `true`이므로 내부 루프에 진입하게 됩니다. 이후에 B에서 `lock = false`를 실행해도, A는 이미 `Testandset(lock)` 내에서 lock 값을 확인하고 내부 루프에 머물게 됩니다. 따라서 A가 먼저 실행된 경우, 무한 루프에 빠지게 됩니다.하지만 B가 먼저 실행되어 `lock = false`가 실행되면, A의 `Testandset(lock)`에서 lock 값이 `false`로 변경되므로 내부 루프를 빠져나와 실행이 계속됩니다. B가 `lock = false`를 여러 번 실행해도, A는 한 번의 `Testandset(lock)` 이후에는 `lock`이 `false`이기 때문에 루프에서 빠져나올 수 있습니다.

답변에 도움이 되셨음 합니다.

질문과 답변을 친구들과 공유하세요.