게임하고도 별 상관없고 학교에서 운영체제 수업에서 나온 리포트[......] 입니다만,
일단 상호배제 알고리즘 중에서 가장 많이 쓰이는 세마포어의 경우에
P함수와 V함수를 통해서 S를 변화시켜 '화장실 문 닫겼음' 과 같은 방법으로 상호배제를 한다고 하는데,
문제는 그 S변수 자체도 공유변수로 봐야하느냐 아니냐... 라는 것이 문제입니다.
제 생각에는 하드웨어적인 TestAndSet를 통해서 세마포어 변수를 제어하는거 같기도 한데...
여기저기 찾아보니까 가장 근접한거라는게
'세마포어 변수는 서로 다른 두 프로세스가 동시에 접근할 수 없다'
라고만 돼있어서-_-); 애매하군요.
혹시 정확히 아시는 분 계시면 좀 알려주세용[...]
하지만 다른 프로세스가 접근하여서 자신이 점유하고 있는 중이라도 이를 무시하고 점유하여서 개입할 수 있습니다.
때문에 원치않는 다른 프로세스의 개입을 배제시키기 세마포어 라는 것을 두고서 접근하기 전에 우선 세마포어를 확인해서
잠김 표시가 없으면 자신이 세마포어에 잠김 표시를 해두고서 그 자원을 점유합니다.
반대로 잠김 표시가 있다면 일정 시간 간격을 두고서 잠김이 풀렸는 지를 체크하여서 자원을 점유할 수 있기를 기다리게 됩니다.
따라서 세마포어는 시간적 순서에 의해서 접근하게 됩니다.
그리고 세마포어가 동시에 접근할 수 있느냐가 아니라 세마포어에 의해서 자원을 동시에 사용하는 것을 막는 다는 것이 중요하겠죠.
자바에서 쓰레드를 돌릴 때에 싱크로나이즈드 옵션을 걸어주는 것을 생각해보시면 됩니다.