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

<- ResumeThread() - Thread Index - ThreadID() ->