2016-10-19 4 views
0

내 책에서 말하는 답변은 x입니다.카운팅 세마포어에는 값 -x가 있습니다. 얼마나 많은 대기 프로세스가 있습니까?

하지만 어떻게 가능합니까? 방금 ​​Differnce between Counting and Binary Semaphores에서 카운팅 세마포어가 양수 값을 가지므로 여러 프로세스가 중요 섹션에 액세스 할 수 있음을 알게되었습니다. 따라서, x 프로세스가 0에 도달하면 다음 대기 신호가 프로세스를 대기 중이고 세마포 값이 결코 0보다 작을 수 없기 때문에 x 프로세스가 대기 중임을 어떻게 알 수 있습니까?

이제 I가 있습니다. 두 번째 시나리오가 될 수 있다고 생각합니다. 카운팅 세마포어는 이제 1로 초기화된다 마찬가지로 프로세스 접근은, 우리가 쓰는 경우 대기에서 0 다음,

while(s <= 0); 

이되면, 그 다음 과정은 그것을 만들 -1. 따라서 대기중인 단일 프로세스는 세마포 값 -1을 만듭니다.

따라서 결론적으로, -x의 경우 x 프로세스가 바쁜 대기 중입니다!

내가 옳았는지 잘못했는지 누군가 알 수 있습니까? 어떤 도움을 주셔서 감사합니다. 미리 감사드립니다. 초기 값과 노력 프로세스의 수에 따라 값

struct semaphore{ 
      int value; 
      Queue L; 
      } 


다음 가변 "값"네거티브, 포지티브 취할 수 또는 '0'

답변

4

카운팅 세마포어 아래로 구현 그것을 액세스. 변수 "value"의 초기 값은 동시에 액세스 할 수있는 프로세스의 수를 나타냅니다.

대기() 메소드로 구현됩니다 : 프로세스가 세마포어에 액세스하려고 그래서

wait(semaphore s){ 
      s.value--; 
      if(s.value < 0){ 
       put the process in the queue s.L; 
       sleep(); 
       } 

하고 값이 '0'이하가되면, 그것은 더 이상 권한이 없기 때문에 잠을로 이동합니다 리소스에 액세스 할 수 있습니다.
따라서 프로세스가 세마포어에 액세스하려고 시도하는 횟수는 값이 여러 번 감 소하고 값이 음수가되면 프로세스는 signal() 메소드에 의해 깨어날 때까지 대기 대기열에서 대기합니다. 프로세스의 수와 동일한 절대 값은 성공적으로 액세스하지 못했습니다.

+0

내가 찾고있는 것이 그 것이다. 감사. :) – lU5er