LockMutex()

Syntaxe

LockMutex(Mutex)
Description
Verrouillage d'un mutex.

Arguments

Mutex Le mutex à verrouiller.

Valeur de retour

Aucune.

Remarques

Cette fonction attend la disponibilité du mutex avant de le verrouiller et continue son exécution. Le prochain thread qui demandera le verrouillage de ce mutex ne pourra continuer son exécution que lorsque ce mutex sera déverrouillé.

Il est garanti que seulement un thread continue d'exécuter le code protégé par ce mutex et peut ainsi accéder aux ressources partagées en lecture et en écriture sans risque de corruption.

Si un autre thread appel LockMutex() alors que ce mutex est verrouillé, il sera stoppé et mis en attente jusqu'à ce que ce thread appelle UnlockMutex() pour déverrouiller le mutex.

Note: étant donné que LockMutex() attend indéfiniment que le mutex soit déverrouillé, il peut y avoir des situations de blocage si un appel à UnlockMutex() est oublié.

Exemple

  ; Exécutez ce programme une fois comme il se présente. 
  ; Vous verrez que les lignes imprimées seront
  ; mélangées entre les threads. Puis supprimez 
  ; les commentaires devant les commandes de Mutex
  ; et les chaînes seront imprimées dans l'ordre, 
  ; car un seul thread à la fois sera autorisé 
  ; à exécuter les commandes d'impression.
  ;
  Procedure SansMutex(*Numero)     
    Shared Mutex
    
    For a = 1 To 5      
      ;LockMutex(Mutex)    ; supprimez le commentaire pour voir la différence
    
      PrintN("Thread "+Str(*Numero)+" essaie d'imprimer 5 fois a la suite :")
      For b = 1 To 5
        Delay(50)
        PrintN("Thread "+Str(*Numero)+" Ligne "+Str(b))
      Next b          
      
      ;UnlockMutex(Mutex)  ; supprimez le commentaire pour voir la différence
    Next a    
  EndProcedure
  
  OpenConsole()
  Mutex = CreateMutex()
  
  thread1 = CreateThread(@SansMutex(), 1)
  Delay(25)
  thread2 = CreateThread(@SansMutex(), 2)
  Delay(25)
  thread3 = CreateThread(@SansMutex(), 3)
  
  WaitThread(thread1)
  WaitThread(thread2)
  WaitThread(thread3)
  
  Input()

Voir aussi

UnlockMutex(), CreateMutex()

OS Supportés

Tous

<- KillThread() - Thread Index - PauseThread() ->