Si vous n'êtes pas familier avec le problème, c'est quelque chose comme this.Problème de pont à une seule voie
Je ne suis pas venu pour demander une réponse, j'ai en fait terminé tout mon codage. Je viens de constater que ma solution ne la résout pas le mieux possible, car ma solution ne permet qu'une seule voiture à la fois sur le pont. J'espérais pouvoir obtenir quelques conseils sur la façon d'utiliser sem_wait et sem_post pour résoudre ce problème. J'espère permettre au trafic qui coule dans la même direction de circuler ensemble et pas un à la fois.
Ma solution semble actuellement quelque chose comme:
(le nord et le sud de défaut = 1 pour déverrouillées pour 1 voiture)
IF northcar puis sem_wait (sud), sem_wait (nord). Traversez le pont, puis sem_post (nord), sem_post (sud). C'est évidemment faux parce que c'est bloquer le pont de toutes les voitures autres que celui sur lui. Je veux permettre au trafic de circuler ensemble. Des idées? J'utilise du trafic généré aléatoirement, ce qui ajoute un peu de complexité à celui-ci.
par la propriété comptant que vous voulez dire incrémenter/décrémenter avec post/wait, ainsi que sem_getvalue? –
À la réflexion, l'une des conditions est que lorsqu'aucune voiture n'est sur le pont, les feux des deux extrémités sont verts. Je pensais que cela fonctionnerait laisser les voitures courir aux lumières et le premier là au nord ou au sud peut entrer et rendre l'autre extrémité rouge. Cependant, j'ai été incapable de le faire efficacement avec sem_wait et sem_post –
Q1: Oui, en comptant la propriété, je veux dire incrémentation/décrémentation avec post/wait. Q2: Dans la vraie vie, vous ne faites jamais de feu vert simultanément dans des directions conflictuelles. Pensez à ce qui se passe si deux voitures s'approchent du pont à grande vitesse dans les deux directions en même temps; le pilote qui perd la course n'a peut-être pas le temps de s'arrêter. Une situation similaire pourrait se produire dans votre code si les sémaphores sont tous les deux "verts" en même temps. – zwol