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
...