CreateMutex()
Syntaxe
Mutex = CreateMutex()Description
Crée un nouveau mutex.
L'objectif principal des mutex est de faire de la synchronisation entre les threads. Ils ne consomment pas beaucoup de temps processeur, mais ils ne fonctionnent qu'au sein du programme (il n'est pas possible de synchroniser plusieurs programmes différents). Un mutex est un objet qui ne peut être verrouillé que par un seul thread à la fois, donc il est utilisé pour protéger l'accès aux ressources partagées (pour éviter que plusieurs threads accèdent en même temps aux même données).
Les commandes LockMutex() et UnlockMutex() permettent de verrouiller ou de déverrouiller le mutex. Quand un mutex est verrouillé, les autres threads qui demandent le verrouillage sont stoppés et mis dans une file d'attente. Dès que le mutex est déverrouillé, le thread suivant dans la file d'attente verrouille à son tour le mutex et continue son exécution.
Exemple
; Executez ce programme une fois comme il se présente. Vous verrez que les lignes imprimées seront
; mélangées entre les threads. Maintenant 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()
OS Supportés
Tous