2012-07-25 3 views
1

리더/라이터의 동기화 구현을보고 있는데 질문이 있습니다. 대기 (독자)가 상호 배제 영역 외부에서 수행됩니다 왜 내 질문입니다, 이것은 독자 코드리더/라이터 동기화 정보

start_reading(){ 
lock(m); 
if (em_escrita || escritores_espera > 0) { 
    leitores_espera++; 
    unlock(m); 
    wait(readers); 
    lock(m); 
}else 
    nleitores++; 
unlock(m); 
} 

finish_reading(){ 
lock(m); 
nleitores--; 
if (nleitores == 0 && escritores_espera > 0){ 
    post(writers); 
    em_escrita=TRUE; 
    escritores_espera--; 
} 
unlock(m); 
} 

:

내가 찾고 있어요 코드입니다. 그리고 왜 같은 이유로 포스트 (작가)도 밖에서하지 못했습니까?

이 코드는 운영 시스템 코스에서 가져온 것이므로 정확하다는 것이 확실합니다.

누군가 내게 차이점을 말할 수 있습니까?

Thx.

+0

영어로 코드! – Shahbaz

+0

코드를 올바르게 들여 쓰고 OS에 대한 힌트를 주시고 글로벌 기능과 변수에 대한 선언을 보내주십시오. –

답변

0

잠긴 리소스로 대기하는 것은 나쁜 생각입니다. 대기 중에 자원을 해제 할 수 있으면 자원을 잠그고 자하는 다른 사람을 잠그는 것을 막기 위해 자원을 해제해야합니다.

세마포어 게시는 리소스를 잠그지 않으며 모든 상황에서 사용할 수 있습니다 (잠금에주의하지 않음).

관련 문제