pthread: modele cooperatif

pthread: modele cooperatif - C - Programmation

Marsh Posté le 03-12-2005 à 12:55:57    

Bonjour,
 
Je voulais vous poser une question à propos des pthreads.
 
Je voulais avoir la confoirmation qu'ils fonctionnent en coopératif cad que si par exemple, on lance plusieurs threads, il en choisira un des deux en premier (euh je c pas s'il commencera forcement par le 1er ou s'il peut commencer par le second...) et ensuite, chaque thread ne peut etre interrompu par un autre thread, que si celui-ci redonne la main manuellement à l'ordonnanceur.
 
Donc en gros, ca veut bien dire que si aucun thread, ne veut redonner la main à lo'rdonnanceur,  
 
on aura comme execution possible:
soit t1 t2 ou
soit t2 t1.
 
Est-ce que j'ai bien compris?
 
Merci
A+

Reply

Marsh Posté le 03-12-2005 à 12:55:57   

Reply

Marsh Posté le 03-12-2005 à 14:52:19    

thierry_b a écrit :

Je voulais avoir la confoirmation qu'ils fonctionnent en coopératif


[rien à voir avec le langage C...]
 
Oui. Un thread avec une boucle 'blanche' prend 100% du temps alloué au processus qui l'a crée. La coopération se fait par attente ou par suspension.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 03-12-2005 à 15:52:30    

gni j'ai loupé un truc là...
t'as de la doc, passke je comprends par pourquoi les threads ne seraient pas preemptivés :??:

Reply

Marsh Posté le 04-12-2005 à 00:04:02    

Ca dépend de l'OS. Et pour un OS donné, ça dépend de la politique choisie pour le dispatcher. Mais sur la pluspart des OS, par défaut, le thread sera undispatché à un moment donné si d'autres threads ont besoin du CPU, même si ton thread ne "rend pas la main".
 
En général tu peux, au niveau du thread, choisir la façon dont le kernel dispatchera ton thread. Donc si tu as les droits suffisant, tu peux programmatiquement choisir un mode et une priorité qui feront qu'effectivement, le kernel ne te retirera pas le CPU tant que ton thread ne sera pas suspendu (attente d'IO par exemple) et tant que tu ne relache pas le CPU manuellement (yield).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed