2014-05-21 2 views
-1

'작은 책 세마포어'에서 '독점적 인 대기열'문제에 대한 해결책을 쓰려고합니다. 문제는 다음과 같이 표현됩니다 :볼룸 댄서는 세마포어를 사용합니다.

스레드는 볼룸 댄서를 대표하고 댄서, 지도자 및 추종자의 두 종류가 댄스 플로어에 입장하기 전에 두 대기열에서 기다리는 것을 상상해보십시오. 리더가 도착하면 기다리는 추종자가 있는지 확인합니다. 그렇다면, 그들은 모두 진행할 수 있습니다. 그렇지 않으면 기다립니다.

마찬가지로 팔로워가 도착하면 리더를 확인하고 이에 따라 진행하거나 기다립니다. 여기 추종자

mutex.wait() 
if leaders> 0: 
    leaders-- 
    leadersQueue.signal() 
else: 
followers++ 
mutex.signal() 
followersQueue.wait() 
dance() 
rendezvous.wait() 

나는 계속 어떻게

코드입니다 learder

mutex.wait() 
if followers > 0: 
    followers-- 
    followerQueue.signal() 
else: 
leaders++ 
mutex.signal() 
leaderQueue.wait() 
dance() 
rendezvous.wait() 
mutex.signal() 

의 코드이며, 여기

public class Ballroom { 

public void leaderEntered(){ 
//the calling leader thread will either block, waiting for 
//follower or will proceed to dance 
dance(); 
} 

public void followerEntered(){ 
//the calling followerthread will either block, waiting for 
//leader or will proceed to dance 
dance(); 
} 

private void dance(){ 
System.out.println("doing dance"); 
} 

} 

과 :

나는 다음 볼룸 클래스를 넣어? ?

답변

0

이것은 수면 이발 문제와 매우 비슷합니다. 이보고보십시오 : 이 Sleeping Barber algorithm (with multiple barbers)

현재이 문제에 대한 자세한 읽을 수 있습니다 : 하나 베르베르는에 ... 거기에 http://en.wikipedia.org/wiki/Sleeping_barber_problem

+0

감사가 you..but이 이발사 문제를 수면에 similar..because되지 않습니다 내 문제에는 많은 지도자들이 있습니다. –

+0

문제는 없지만 실제로 제공된 링크에는 "다중 이발사"솔루션이 있습니다. –