(* SEM sem_t은 pshared가 INT, 부호없는 int 값) 나는 우리가 우리가 코드에 세마포어를 사용하는 방법과 동기화 필요가 있다고 생각
: 을 우리가 원하는 경우 세마포어를 기다리려면 sem_wait (& 뮤텍스)를 호출하고 다른 스레드의 sem_wait (& 뮤텍스)을 실행하도록 알리려면 sem_post (& 뮤텍스)를 호출해야합니다. 그러나 문제는 다른 스레드가 처음에 (시스템 초기화에서) sem_post (& 뮤텍스)를 호출하면 sem_wait (& 뮤텍스)에서 수행해야 할 작업은 무엇입니까? 다른 스레드에서 sem_post (& 뮤텍스)를 호출하거나 기다려야합니까? 대답은 sem_init()의 "value"에 있습니다. 이것이 0이면 다른 스레드가 sem_post()를 한 번 호출 할 때까지 기다려야한다는 것을 의미합니다. 하나 인 경우 sem_wait()를 처음 호출하면 즉시 전달되지만 두 번째 sem_wait()는 대기합니다 (sem_post가 호출되지 않은 경우). 그래서 sem_init()의 값은 sem_post()없이 실제로 기다리지 않고 sem_wait()를 실행할 수있는 횟수를 의미합니다. 그리고 우리는 같은 sem_wait() 고려할 수 : 값이 다른 스레드/
동안 (값 < = 0) {}
value--에 의해보다 더 큰 0으로 변경 될 때까지 /교착 상태가 대기를 ;
그리고 같은 sem_post() 고려 :
값을 ++;
"가치있는"이란 무엇을 의미합니까?잠겨 있거나 잠금이 해제되었음을 의미합니까? 세마포어의 가능한 문의 수를 지정합니까? – SomethingSomething