Семафоры и параллельное программирование

Для домашнего задания мне нужно запрограммировать следующий сценарий. Это будет сделано с использованием семафоров с использованием BACI (то есть C--)

Есть 2 туалета для мужчин и женщин, каждая из которых может вместить 4 человека. Поскольку это унисекс, в туалете могут одновременно находиться только люди одного пола, и FIFO не имеет значения. У меня в голове есть базовый «алгоритм», чтобы справиться с 4 мужчинами и 4 женщинами на 1 туалет. Но я не знаю, как это кодировать. Любая помощь будет принята с благодарностью. Вот что у меня есть.

Woman:

Check to see if there are any men in the restroom. If so "wait".
If no men check to see if there are 4 people. If so "wait".
If no men and not 4 use restroom. When leaving signal there is a vacancy.
If last woman signal the men if they are waiting if not signal the woman.


Man:

check to see if there are any woman in the restroom. if so "wait"
If no woman check to see if there are 4 people. If so "wait".
If no woman and not 4 use restroom. when leaving signal there is a vacancy.
if last man signal the women if they are waiting if not signal the men.

Эти дополнительные инструкции были предоставлены

  • Используйте случайные циклы FOR для моделирования течения времени в соответствующих местах. Это легко сделать с помощью функции задержки:

     void Delay (void) Это будет сделано с использованием семафоров с использованием BACI (то есть C--) 

    Есть 2 туалета для мужчин и женщин, каждая из которых может вместить 4 человека. Поскольку это унисекс, в туалете могут одновременно находиться только люди одного пола, и FIFO не имеет значения. У меня в голове есть базовый «алгоритм», чтобы справиться с 4 мужчинами и 4 женщинами на 1 туалет. Но я не знаю, как это кодировать. Любая помощь будет принята с благодарностью. Вот что у меня есть.

    Woman:
    
    Check to see if there are any men in the restroom. If so "wait".
    If no men check to see if there are 4 people. If so "wait".
    If no men and not 4 use restroom. When leaving signal there is a vacancy.
    If last woman signal the men if they are waiting if not signal the woman.
    
    
    Man:
    
    check to see if there are any woman in the restroom. if so "wait"
    If no woman check to see if there are 4 people. If so "wait".
    If no woman and not 4 use restroom. when leaving signal there is a vacancy.
    if last man signal the women if they are waiting if not signal the men.
    

    Эти дополнительные инструкции были предоставлены

    • Используйте случайные циклы FOR для моделирования течения времени в соответствующих местах. Это легко сделать с помощью функции задержки:

       void Delay (void) Это будет сделано с использованием семафоров с использованием BACI (то есть C--) 

      Есть 2 туалета для мужчин и женщин, каждая из которых может вместить 4 человека. Поскольку это унисекс, в туалете могут одновременно находиться только люди одного пола, и FIFO не имеет значения. У меня в голове есть базовый «алгоритм», чтобы справиться с 4 мужчинами и 4 женщинами на 1 туалет. Но я не знаю, как это кодировать. Любая помощь будет принята с благодарностью. Вот что у меня есть.

      Woman:
      
      Check to see if there are any men in the restroom. If so "wait".
      If no men check to see if there are 4 people. If so "wait".
      If no men and not 4 use restroom. When leaving signal there is a vacancy.
      If last woman signal the men if they are waiting if not signal the woman.
      
      
      Man:
      
      check to see if there are any woman in the restroom. if so "wait"
      If no woman check to see if there are 4 people. If so "wait".
      If no woman and not 4 use restroom. when leaving signal there is a vacancy.
      if last man signal the women if they are waiting if not signal the men.
      

      Эти дополнительные инструкции были предоставлены

      • Используйте случайные циклы FOR для моделирования течения времени в соответствующих местах. Это легко сделать с помощью функции задержки:

         void Delay (void) в моей голове обрабатывать 4 мужчин и 4 женщины на 1 туалет. Но я не знаю, как это кодировать. Любая помощь будет принята с благодарностью. Вот что у меня есть. 

        Woman:
        
        Check to see if there are any men in the restroom. If so "wait".
        If no men check to see if there are 4 people. If so "wait".
        If no men and not 4 use restroom. When leaving signal there is a vacancy.
        If last woman signal the men if they are waiting if not signal the woman.
        
        
        Man:
        
        check to see if there are any woman in the restroom. if so "wait"
        If no woman check to see if there are 4 people. If so "wait".
        If no woman and not 4 use restroom. when leaving signal there is a vacancy.
        if last man signal the women if they are waiting if not signal the men.
        

        Эти дополнительные инструкции были предоставлены

        • Используйте случайные циклы FOR для моделирования течения времени в соответствующих местах. Это легко сделать с помощью функции задержки:

           void Delay (void) в моей голове обрабатывать 4 мужчин и 4 женщины на 1 туалет. Но я не знаю, как это кодировать. Любая помощь будет принята с благодарностью. Вот что у меня есть. 

          Woman:
          
          Check to see if there are any men in the restroom. If so "wait".
          If no men check to see if there are 4 people. If so "wait".
          If no men and not 4 use restroom. When leaving signal there is a vacancy.
          If last woman signal the men if they are waiting if not signal the woman.
          
          
          Man:
          
          check to see if there are any woman in the restroom. if so "wait"
          If no woman check to see if there are 4 people. If so "wait".
          If no woman and not 4 use restroom. when leaving signal there is a vacancy.
          if last man signal the women if they are waiting if not signal the men.
          

          Эти дополнительные инструкции были предоставлены

          • Используйте случайные циклы FOR для моделирования течения времени в соответствующих местах. Это легко сделать с помощью функции задержки:

             void Delay (void)
            { 
             int i;
             int DelayTime;
             DelayTime = случайный (ЗАДЕРЖКА);
             для (i = 0; i 
          • где const int DELAY = некоторое число от 10 до 100.

          • Распечатайте и отформатируйте вывод, а также распечатайте сообщения таким образом, чтобы, прочитав вывод, можно было проследить порядок выполнения.
          • Настройте процессы. для бесконечного цикла и используйте элемент управления C (или прерывание управления), чтобы остановить вашу программу.
7
задан Bill the Lizard 19 September 2012 в 22:02
поделиться