SignalSemaphore()
Syntaxe
SignalSemaphore(Semaphore)Description
Augmente la valeur du compteur interne du sémaphore de un, ce qui a pour effet de débloquer le thread en attente sur ce sémaphore (si il y en a un).
Arguments
Semaphore Le sémaphore à signaler.
Valeur de retour
Aucune.
Remarques
Le compteur maximal d'un sémaphore est
limité à une
valeur 32 bits
signée, donc un maximum de 2147483647
appels à SignalSemaphore() peuvent être
effectués sans être contre-balancés
par des appels à WaitSemaphore().
; 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
WaitSemaphore(), TrySemaphore()
OS Supportés
Tous