2009-10-25 5 views
0

Nous couvrons la programmation multithread dans une classe que je prends. Le professeur a offert une question de bonus que j'ai essayé, en vain, de comprendre:Synchronisation multiprocess avec un seul sémaphore

Chacun des processus P0, P1, P2 et P3 doit attendre que les trois autres croisés ou atteignent un point de synchronisation particulier dans leur code, et alors seulement ce processus peut traverser son propre point de synchronisation.

Je sais déjà comment répondre à la question avec quatre sémaphores, le plus difficile est de le faire avec un seul sémaphore.

Des suggestions ou des conseils sur la façon de procéder?

+0

Votre formulation du problème est plutôt imprécise, il est donc peu probable que vous obteniez de bons conseils. –

Répondre

0

Juste initialisez votre sémaphore à -4 si ce n'est pas un binaire.

+0

ok une explication pour le vote à la baisse? – attwad

+0

Je n'ai pas voté bas mais je suppose que c'était parce que vous ne pouvez pas initialiser des sémaphores avec des valeurs négatives. Dans POSIX, la valeur est non signée et les documents Windows indiquent spécifiquement une valeur égale ou supérieure à 0. – Duck

+0

c'est assez limitatif: j'ai souvent besoin d'un sémaphore inverse et je ne pourrais jamais en trouver un. Bien qu'il ne soit pas possible en raison de limitations logicielles, sa réponse est parfaitement logique. un peu d'explication aurait été la bienvenue cependant. –

0

Vous êtes un peu léger sur les contraintes imposées à votre solution mais voyez The Little Book of Semaphores et lisez les sections sur les barrières. Cela devrait vous donner quelques idées.

+0

Merci pour la ressource, cela devrait être très utile. – KidDaedalus

0

Il s'avère que le professeur avait voulu dire que vous pouviez utiliser deux sémaphores au lieu d'un. Il croit, comme je le fais après avoir réfléchi un moment au problème, qu'il est impossible de faire avec un seul sémaphore.

+0

C'est pourquoi j'ai commenté votre ne pas trop parler de contraintes. Vous pouvez le faire avec un sémaphore et un mutex protégeant un compteur mais je n'étais pas sûr si vous pouviez utiliser des mutex ou s'ils comptaient comme un second sémaphore. – Duck