1
세마포어에 대해 배우는 Im : sem_wait 및 sem_signal. 리소스는 상호 배제를 구현하기 위해 세마포어가 원자로되어야한다고 말합니다. 왜 그들이 원자가되어야하는지 이해할 수 없습니까?! 그들이 그렇지 않으면 어떻게 될까요?!세마포어가 원자가가되는 이유는 무엇입니까
세마포어에 대해 배우는 Im : sem_wait 및 sem_signal. 리소스는 상호 배제를 구현하기 위해 세마포어가 원자로되어야한다고 말합니다. 왜 그들이 원자가되어야하는지 이해할 수 없습니까?! 그들이 그렇지 않으면 어떻게 될까요?!세마포어가 원자가가되는 이유는 무엇입니까
이것은 상호 세마포어 구현이 원적이지 않은 경우 발생합니다.
1 while (semaphore == locked) {
2 pause;
3 }
4 semaphore = locked;
이의 프로세서 0 및 프로세서 1 모두가 세마포어를 잠 그려한다고 가정 해 봅시다, 그리고 몇몇 다른 프로세서 (# 2) 세마포어를 가지고 :의 우리가 세마포어를 구현하기 위해이 코드를 사용한다고 가정 해 봅시다. 따라서 프로세서 0과 1은 모두 1 회선에서 시작하는 while 루프에 있습니다.
다른 프로세서 (# 2)가 세마포어를 잠금 해제하면 두 개의 프로세서 (# 0 및 # 1)는 각각의 while 루프를 종료 할 수 있습니다. 세마포어 이제 잠금이 해제되었습니다.
이제 프로세서 0과 1은 모두 세마포어를 잠 갔다고 생각합니다. 이것은 나쁘다.
세마포어 값의 읽기와 쓰기는 다른 프로세서와 관련하여 원자 적이어야합니다.
명확하지 않은 경우 의견을 보내 주시기 바랍니다. 필요한 경우 자세히 설명 드리겠습니다.
알겠습니다. 감사합니다. :) – Kadaj13