Les sémaphores et la programmation simultanée

Pour un devoir à la maison j'ai besoin de programmer le scénario suivant. Cela va être fait en utilisant les sémaphores à l'aide de BACI (qui est C--)

Il y a 2 toilettes unisexe qui peut contenir 4 personnes chacune. Puisque c'est unisexe les personnes de même sexe peut être dans la salle de bain en même temps et FIFO n'est pas important. J'ai la base "algorithme" dans ma tête à manipuler 4 hommes et 4 femme pour 1 toilette. Mais je ne sais pas comment ce code. Toute aide serait grandement appréciée. Voici ce que j'ai.

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.

Ces instructions supplémentaires ont été fournis

  • Utilisation aléatoire POUR les boucles de simuler le passage du temps dans les endroits appropriés. Cela peut être fait facilement en utilisant une fonction de Délai:

    void Delay (void)
    { 
      int i;
      int DelayTime;
      DelayTime = random (DELAY);
      for (i = 0; i < DelayTime; i++):
    }
  • où const int DELAY = un certains nombres de 10 à 100.

  • D'impression et le format de sortie joliment et imprimer des messages de telle manière que par la lecture de la sortie, on peut tracer l'exécution de la commande.
  • Définir le processus jusqu'à boucle pour toujours, et contrôle de l'utilisation du C (ou pause) pour arrêter votre programme.
  • A-t-elle optimale?
  • Pas de. Mais il ne peut pas avoir faim. Alors, les hommes et les femmes doivent utiliser les toilettes assez.
  • Je ne suis pas sûr si vous êtes inquiet au sujet de la famine, mais je suis sûr que votre algorithme a une lacune. Imaginez le cas où un homme se présente alors qu'une femme est déjà dans la salle de bain, et un flux régulier de femmes de continuer à montrer de sorte que la salle de bains est jamais vide.
  • oui. c'est l'une des questions que je vais voir et je suis besoin d'aide. La famine. cela pourrait-il être fixé par chaque femme le signal d'un homme et de chaque homme, chaque signal une femme?
  • Comment à propos de la limitation de sorte que chaque fois que vous atteindre 4 personnes dans la file d'attente de l'autre sexe vous passez sexes. De cette façon, votre faim problème est résolu.
  • Cela sonne comme une bonne idée. Ma question maintenant est de savoir comment puis-je configurer la Femme et de l'homme du processus de sorte que les 4 personnes peuvent aller dans les toilettes à un moment? J'ai mon programme en cours d'exécution afin qu'il permet 1 personne dans la toilette en un moment, sans blocage ou de famine. mais il peut y avoir 4 personnes dans la salle de bain à la fois.
  • c'est ce que j'ai à ce jour:
  • Un peu hors-sujet, mais votre fonction de temporisation est cassé. Tout bon compilateur compile à l'équivalent de: void Delay(void) { random(DELAY); }
  • Comment gérez-vous les transgenres salle de bains occupants?
  • Je ne pense pas que résoudre le problème de la famine. Si vous avez seulement one-man-show up alors que la salle de bain est occupée par une femme, il est toujours à gauche et jambes croisées indéfiniment. Je pense que la famine doit être abordée en tenant compte à la fois les salles de bains. I. E, si la file d'attente contient les deux sexes, l'une des toilettes de services des hommes, les autres femmes, avec une signalisation appropriée pour permettre à la fois au service du même genre quand il y a rien de l'autre sexe dans la file d'attente.

InformationsquelleAutor Jen | 2010-10-03