Thread / Mutex /Semaphore

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Thread / Mutex /Semaphore

Message par Thyphoon »

J'avoue que j'ai du mal a comprendre un certain nombre de chose avec les Threads ! Malgré les exemples trouvé je comprends rien au Mutex et au Semaphore...

J'arrive a utiliser les Threads, mais je sais pas si je risque ou pas d'avoir un jour un problème de synchro lecture ecriture

Exemple (le principe) :

Code : Tout sélectionner

;J'ai une liste qui va contenir des infos
Global Newlist Info.s()

;J'ai une procédure qui permet d'aller chercher ces infos sur le web.... mais ça peut être plus ou moins long
Procedure ReadNetworkInfo(a.l)
  ;J'attends des infos qui viennent d'un flux RSS
  ClearList(Info())
  for z=0 to NbInfotrouve
    AddElement(Info())
    Info()=Innfotrouve(z)
  Next
Endprocedure

;Comme je ne veux pas bloquer mon programme pendant l'arrivé des infos des fois c'est curieusement long je créer un Thread
CreateThread(@ReadNetworkInfo(),0)

;Ma boucle principal qui affiche des trucs a l'ecran
Repeat

;Affichage des infos de la liste qu'elle soit complète ou nom !
Foreach Info()
  ;Affichage sur l'ecran du contenu de la list Info 
Next
Flipbuffer()
Until Quit=1

Est-ce bien comme ça qu'il faut faire ou faut il utiliser les Mutex/Semaphore pour éviter que la boucle principal lise la liste en même temps que le Thread ne l'écrit ?
si c'est le cas comment faire ?
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Thread / Mutex /Semaphore

Message par Le Soldat Inconnu »

comme ça

en gros si le code principal a verrouille le mutex, le thread doit attendre car la liste chainée est utilisé
et vice versa, si la liste chainée verrouille le mutex, elle utilise la liste chainée, donc le prog principal doit attendre avant de pouvoir utilisé la liste chainée

Code : Tout sélectionner

;J'ai une liste qui va contenir des infos
Global NewList Info.s()
Global Mutex

;J'ai une procédure qui permet d'aller chercher ces infos sur le web.... mais ça peut être plus ou moins long
Procedure ReadNetworkInfo(a.l)
	;J'attends des infos qui viennent d'un flux RSS
	LockMutex(Mutex)
	ClearList(Info())
	For z=0 To NbInfotrouve
		AddElement(Info())
		Info()=Innfotrouve(z)
	Next
	UnlockMutex(Mutex)
EndProcedure

;Comme je ne veux pas bloquer mon programme pendant l'arrivé des infos des fois c'est curieusement long je créer un Thread
Mutex = CreateMutex()
CreateThread(@ReadNetworkInfo(),0)

;Ma boucle principal qui affiche des trucs a l'ecran
Repeat
	
	;Affichage des infos de la liste qu'elle soit complète ou nom !
	LockMutex(Mutex)
	ForEach Info()
		;Affichage sur l'ecran du contenu de la list Info
	Next
	UnlockMutex(Mutex)
	Flipbuffer()
Until Quit=1

FreeMutex(Mutex)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Thread / Mutex /Semaphore

Message par Thyphoon »

merci beaucoup je commence a comprendre le coup des mutex.
la variable mutex ça doit être un .i ? un .l ou bien un .b suffit ?
Et tant que j'y suis les sémaphores ça ne sert pas a la même chose ? !
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Thread / Mutex /Semaphore

Message par Le Soldat Inconnu »

moi, je mets un .l sous 32bit

les sémaphore, je n'ai jamais utilisé

j'utilise des variables globales pour communiquer avec mes threads

En gros, il faut simplement faire attention à tous ce qui s'indexe en auto, donc les strings (ça c'est l'option threadsafe dans le compiler) et les listes chainée ou assimilés.
Ensuite, il y a certain particulier comme dessiner sur une image
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Thread / Mutex /Semaphore

Message par Thyphoon »

Le Soldat Inconnu a écrit :moi, je mets un .l sous 32bit

les sémaphore, je n'ai jamais utilisé

j'utilise des variables globales pour communiquer avec mes threads

En gros, il faut simplement faire attention à tous ce qui s'indexe en auto, donc les strings (ça c'est l'option threadsafe dans le compiler) et les listes chainée ou assimilés.
Ensuite, il y a certain particulier comme dessiner sur une image
Merci beaucoup pour ce complément d'information. Je me sens beaucoup plus alaise avec les Thread et les mutexs ! :)
Répondre