2012-05-08 4 views
-4

可能な重複ロジックをfiguing:
bathroom synchronization and queue of threadsトラブル浴室のsyncronizationため

を、私は彼らが私は私の質問に答える助けていない、スタック内の同様の質問を見て、グーグルを使用しています。宿題のために、私は浴室の同期の問題が与えられています。共有バスルーム、女性は男性がそこにいる間は使用できず、その逆もあります。私が把握しようとしているのは、他のセックスがバスルームにある場合にスレッドを停止して再起動する方法です。これまでのところ、異性の誰もそこにいない場合、セマフォーに待つように指示するいくつかの条件があります。その後、あなたのセックスの誰もがトイレに残っていない場合は、他のセックスを(セマフォが行く)にしておきます。私はスレッドをロックするか、セマフォを待つかに問題があるかどうかわかりません。ここに私のコードです。

//私の変数

sem_t male; 
sem_t female; 
int maleInBath; 
int femaleInBath; 
pthread_mutex_t coutMutex; 

//変数

void personInitGlobals() 
{ 
    // LEAVE THIS STATEMENT             
    pthread_mutex_init(&coutMutex, NULL); 

    // TODO: Complete this function           
    int init=0; 
    maleInBath=0; 
    femaleInBath=0; 
    sem_init(&male, 0, init); 
    sem_init(&female, 0, init); 
} 

//が

void personEnterRestroom(int id, bool isFemale) 
{ 
    // LEAVE THESE STATEMENTS            
    pthread_mutex_lock(&coutMutex); 
    cout << "Enter: " << id << (isFemale ? " (female)" : " (male)") << endl\; 
    pthread_mutex_unlock(&coutMutex); 

    // TODO: Complete this function           
    if(isFemale && maleInBath==0){ 
    femaleInBath++; 
    }else if(isFemale && maleInBath >0){ 
     sem_wait(&female); 
    }else if(!isFemale && femaleInBath==0){ 
     maleInBath++; 
    }else{ 
    sem_wait(&male); 
    } 
} 

人がトイレ

void personLeaveRestroom(int id, bool isFemale) 
{ 
    // LEAVE THESE STATEMENTS            
    pthread_mutex_lock(&coutMutex); 
    cout << "Leave: " << id << (isFemale ? " (female)" : " (male)") << endl; 
    pthread_mutex_unlock(&coutMutex); 

    // TODO: Complete this function           
    if(isFemale){ 
    femaleInBath--; 
    if(femaleInBath==0){ 
     sem_post(&male); 

    } 
    }else{ 
    maleInBath--; 
    if(maleInBath==0){ 
    sem_post(&female); 

    } 
} 
を残してトイレに入る初期化0

}

+2

うーん、他の誰かがこの同じ割り当てについて数日前に質問を投稿しました。 –

+2

@SamDufel:http://stackoverflow.com/questions/3850491/mutual-exclusion-and-semaphores(oops 2010!) – Flexo

答えて

0

すでにawoodlandはSO上の他のスレッドに既にリンクしているので、その上に見て良いです。 同じクラスの同じ問題に対する重複した解決策を避けるために、セマフォの使用が必須かどうか尋ねます。

そうでない場合は、キューを作成して、すべての担当者をキューに入れてください。新しい人が来たら、あなたのバスルームの利用可能なロジックを適用します。 また、人がバスルームを離れるときに、キューが空でない場合は、再びバスルームロジックを適用します。 それはあなたのためです。

+0

セマフォを使用する必要があります。私は他のスレッドを見てきました、私は理解できない論理について何かがあると思います – Aaron

関連する問題