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