미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
number가 0이 안되는 상황이 이해가 않습니다.
public void Acquire()
{
while (_locked) // 화장실 문이 비어있을 때 까지 대기를 한다.
{ }
// 들어가서 문을 잠그는 작업
_locked = true;
}
이렇게 화장실에 들어가는 과정과 잠그는 과정이 달라서, 그 시간차 동안에 두 쓰레드가 동시에 공유 자원에 접근해서 number에 0이지 나오지 않는다고 설명해주셨습니다.
근데 이 설명이 잘 이해가 가지 않습니다.
위 코드에 화장실에 2명이 들어간다는 게 어떤 의미인가요?
제가 이해한 바로는 _locked이 false가 되어 while문을 빠져나왔을 때 다른 쓰레드도 Acquire함수에 접근하여, 두 쓰레드에서 _locked에 true를 대입하는 것으로 이해했습니다.
근데 이러한 이유 때문에 number++와 number-- 연산에서 에러가 나는 과정이 이해가 되지 않습니다. 결국 for문을 만번이든, 10만번이든 돈 다는 뜻은 number++ 혹은 nunber-- 연산을 했다는 뜻인데
왜 number에 0이 출력되지 않고 이상한 값이 출력되는지 잘 모르겠습니다.
number++ 혹은 number-- 연산이 스킵이 되는 과정이 이해가 안갑니다.