2012-12-02 1 views
0

System V 세마포어를 사용 중이고 프로세스를 처음 시작할 때 차단하고 임계 구역을 완료 한 후에 다른 프로세스가 특정 세마포어를 올 때까지 기다려야합니다.
나는 sem_op = 0, 할 적절한 행동 것이라고 생각합니다.제로 세마포어 작업을 기다리는 정확한 기능은 무엇입니까?

그래서 나는 과정 (A)에서 다음 1.
와 세마포어를 초기화, 난에 세마포어를 기다리는 위해 만일 sem_op = 0을 사용하고 차단해야 할 그 과정 BI에서 0 사용하고이되었다 만일 sem_op = -1. (이렇게하면 semaphore.val = 0이됩니다.)

그리고 차단되어야하는 프로세스는 다른 프로세스가 성공적으로 세마포어를 다운시킨 경우 stdout에서 인쇄합니다.

제로 기능 대기는 실제로 무엇을하며 제대로 사용할 수 있습니까?

감사합니다.

답변

0

설명서에 따라 semop = 0은 "0 대기"작업입니다. 그래서 당신의 알고리즘은 효과가 있습니다. 그러나 전통적인 P 연산자와 V 연산자를 사용하여 이러한 문제를 해결하는 것이 바람직합니다. 여기서 P는 semop = -1을 의미하고 V는 semop = +1을 의미합니다. 따라서 세마포어의 초기 값이 0이면 프로세스 A는 P 연산을 수행하고 차단해야합니다. 프로세스 B는 임계 섹션을 완료하고 V 작업을 수행해야합니다. 프로세스 B가 V 작업을 수행하자마자 프로세스 A의 P 작업이 완료되고 진행될 수 있습니다.

+0

나는 위아래로 행동 할 수는 있었지만 테스트를 원했고 언제 어디서 언제 제로 동작이 필요한지 알아 내려고했습니다. 나는 예를 발견했다고 생각한다. – Chris

관련 문제