WaitSemaphore()
Syntaxe
WaitSemaphore(Semaphore)Description
Diminue la valeur du compteur interne du sémaphore de un, ce qui a pour effet de bloquer le thread, si la valeur venait à tomber en dessous de zéro. Le thread sera débloqué dès qu'un autre thread appellera SignalSemaphore().
Arguments
Semaphore Le sémaphore à attendre.
Valeur de retour
Aucune.
Remarques
Le compteur maximal d'un sémaphore est limité à une valeur 32-bit signée, donc un maximum de 2147483647 appels à WaitSemaphore() peuvent être effectués sans être contre-balancés par des appels à SignalSemaphore().
Exemple
; Assurez vous que l'option "Activer la gestion des threads" est sélectionnée ; Global Semaphore = CreateSemaphore() Global Mutex = CreateMutex() Global NewList Queue() Procedure Producer(Total) For i = 1 To Total Delay(Random(750) + 250) ; L'accès à la liste nécessite tout de même un mutex pour être threadsafe LockMutex(Mutex) LastElement(Queue()) AddElement(Queue()) Queue() = i UnlockMutex(Mutex) ; Envoie un signal pour indiquer qu'un nouvel élément est disponible SignalSemaphore(Semaphore) Next i EndProcedure If CreateThread(@Producer(), 30) For i = 1 To 30 ; Attente d'un nouvel élément WaitSemaphore(Semaphore) ; Affiche l'état de la liste LockMutex(Mutex) Queue$ = "Queue:" ForEach Queue() Queue$ + " " + Str(Queue()) Next Queue() Debug Queue$ ; Efface le premier élément de la liste FirstElement(Queue()) DeleteElement(Queue()) UnlockMutex(Mutex) Next i EndIf
Voir aussi
SignalSemaphore(), TrySemaphore()
OS Supportés
Tous