2014-11-18 8 views
1

세마포어에 대해 배우는 Im : sem_wait 및 sem_signal. 리소스는 상호 배제를 구현하기 위해 세마포어가 원자로되어야한다고 말합니다. 왜 그들이 원자가되어야하는지 이해할 수 없습니까?! 그들이 그렇지 않으면 어떻게 될까요?!세마포어가 원자가가되는 이유는 무엇입니까

답변

2

이것은 상호 세마포어 구현이 원적이지 않은 경우 발생합니다.

1 while (semaphore == locked) { 
2 pause; 
3 } 
4 semaphore = locked; 

이의 프로세서 0 및 프로세서 1 모두가 세마포어를 잠 그려한다고 가정 해 봅시다, 그리고 몇몇 다른 프로세서 (# 2) 세마포어를 가지고 :의 우리가 세마포어를 구현하기 위해이 코드를 사용한다고 가정 해 봅시다. 따라서 프로세서 0과 1은 모두 1 회선에서 시작하는 while 루프에 있습니다.

다른 프로세서 (# 2)가 세마포어를 잠금 해제하면 두 개의 프로세서 (# 0 및 # 1)는 각각의 while 루프를 종료 할 수 있습니다. 세마포어 이제 잠금이 해제되었습니다.

이제 프로세서 0과 1은 모두 세마포어를 잠 갔다고 생각합니다. 이것은 나쁘다.

세마포어 값의 읽기와 쓰기는 다른 프로세서와 관련하여 원자 적이어야합니다.

명확하지 않은 경우 의견을 보내 주시기 바랍니다. 필요한 경우 자세히 설명 드리겠습니다.

+0

알겠습니다. 감사합니다. :) – Kadaj13