Pour ou contre les Mutex ^-^ (Ou les mutex pour les Nuls)
Publié : ven. 27/oct./2017 11:25
Je vous propose de tester ce code qui va se charger de lire une photo de 100 bits, bits par bits.
Pour accélérer le traitement, quatre thread vont se partager le travail.
Le premier lira les 25 premiers bits, le suivant les 25 suivants, etc ....
■ Premier code sans mutex.- Si vous le compiler sans option thread, vous allez voir un horrible résultat.
- Si vous le compiler avec l'option Thread dans les options de compilation. Vous verrez que les threads fonctionnent mais avec un résultat dans le désordre.
Pour accélérer le traitement, quatre thread vont se partager le travail.
Le premier lira les 25 premiers bits, le suivant les 25 suivants, etc ....
■ Premier code sans mutex.
Code : Tout sélectionner
Declare Start()
Declare Process(*Numero)
;Photo
Global n = 100, Dim Photo(n), Segment = 25
;Thread
Global Thread0, Thread1, Thread2, Thread3
Start()
Procedure Start()
Protected i
;Création de la photo
For i = 0 To n
Photo(i) = i
Next
thread0 = CreateThread(@Process(), 0)
thread1 = CreateThread(@Process(), 1)
thread2 = CreateThread(@Process(), 2)
thread3 = CreateThread(@Process(), 3)
MessageRequester("Information", "Touche entrée pour terminer")
EndProcedure
Procedure Process(*Numero)
Debug #CRLF$ + "Le Thread " + Str(*Numero) + " lit les bits de " + Str(*Numero * Segment) + " à " + Str(((*numero * Segment) + Segment)-1)
For b = (*Numero * Segment) To ((*numero * Segment ) + Segment) - 1
Debug "Thread " + Str(*Numero) + " lecture cellule " + Str(Photo(b))
Next
EndProcedure
- Si vous le compiler avec l'option Thread dans les options de compilation. Vous verrez que les threads fonctionnent mais avec un résultat dans le désordre.
Debug a écrit :...
Le Thread 3 lit les bits de 75 à 99
[12 :21 :59] Thread 0 lecture cellule 20
[12 :21 :59] Thread 1 lecture cellule 32
[12 :21 :59] Thread 0 lecture cellule 21
[12 :21 :59] Thread 3 lecture cellule 75
[12 :21 :59] Thread 2 lecture cellule 51
[12 :21 :59] Thread 3 lecture cellule 76
[12 :21 :59] Thread 1 lecture cellule 33
[12 :21 :59] Thread 0 lecture cellule 22
[12 :21 :59] Thread 1 lecture cellule 34
[12 :21 :59] Thread 2 lecture cellule 52
[12 :21 :59] Thread 1 lecture cellule 35
...