세마포어로 비디오를 시청하고 더 자세한 정보를 얻기 위해 파기를 시도했습니다. 어셈블리 레벨에서 세마포어가 어떻게 작동하는지 잘 모르겠습니다.하위 레벨의 세마포를 이해하지 못함
P(s):
s = s - 1
if (s < 0) {wait on s}
CRITICAL SECTION
V(s):
s = s + 1
if(threads are waiting on s) {wake one}
나는 그러나 나는이 주위에 내 머리를 포장하는 데 문제가 있어요 개념은 이러한 기능의 뒤에 무엇인지 이해합니다. 2
Thread One Thread Two
load s load s
subtract s,1 subtract s,1
save s save s
그런 다음 거기 빼기 사이에 컨텍스트 스위치이며, 모두 설정의 0으로 모두를 위해 저축 스레드 1 스레드 :
는 S = 1 말을 당신은이 개 스레드가 있습니다. 두 스레드가 s를 0으로보고 임계 영역에 들어 가지 않습니다. 두 스레드가 모두 s = 0을 볼 수 있도록 어셈블리 레벨에서 컨텍스트 전환이 가능하면 스레드가 독점적으로되는 방법을 모르겠습니다.
귀하의 분석에서 "대기 중"부분을 잊어 버렸습니다. –
무슨 뜻인지 확실치 않습니다. S에 뮤텍스가 있습니까? – train55255
아니요, 뮤텍스가 없지만 세마포가 있습니다. 이것은 다른 종류의 동기화 메커니즘이지만 뮤텍스와 마찬가지로 효율적인 * 차단 *을 제공합니다. 즉, OS 스케줄러와 상호 작용합니다. –