Ich erweitere die Funktionalität eines Semaphors. Ich geriet in eine Straßenblockade, als ich realisierte, dass ich die Implementierung eines tatsächlichen Semaphors nicht kannte und um sicherzustellen, dass mein Code korrekt lief, musste ich das wissen.Semaphore Warteschlangen
Ich weiß, dass ein Semaphor funktioniert, indem er Threads blockiert, die darauf warten, wenn sie sem_wait() aufrufen, und ein anderer Thread hat sie derzeit gesperrt. Der Thread wird dann blockiert und dann in eine Warteliste für diesen Semaphor eingefügt.
Meine Frage bezieht sich auf das, was auf einem sem_post() passiert. Wird der nächste Thread aus der Warteliste gezogen, als Sperrthread festgelegt und entsperrt? Oder ist das Buchungsschema komplett anders?
Danke!
Richtig, aber ist es möglich, genau zu wissen, wie die Warteschlange für ein Semaphor funktioniert, wenn nur 1 Thread gleichzeitig passieren darf? – user82229
Semaphoren geben keine Garantie für die Bestellung. Sie müssen nicht tatsächlich eine Warteschlange oder eine andere FIFO-Struktur verwenden. Wenn nur ein Thread zu einem Zeitpunkt erlaubt ist, wenn er V() aufruft, kehrt ein anderer (möglicherweise zufälliger) Thread von seinem P() - Aufruf zurück und fährt fort. –
@Ben S: Warum promoten Sie diesen Kommentar nicht zu einem Teil von Ihnen? Ich denke, es war das, was heluimwhippet von Anfang an verfolgte, und es ist gut gesagt. – dmckee