Bonjour tout le monde,
Je m'excuse pour la longueur du post... les questions se trouvent � la fin... c'est juste pour expliquer sur quoi je travaille
Je suis actuellement en train de d�velopper une applic qui n'a pas le droit d'utiliser les threads. Je sais que ca peut para�tre d�bile, mais dans le cadre de travail, c'est tout � fait justifier. Les superordinateurs sont fait pour calculer des donn�es utilisateur et pas pour perdre leur temps � faire du switch de contexte entre deux threads qui tourne.
Donc les d�veloppeurs des langages et des OS ne permettent pas � un programme de lancer un nouveau thread.
Ce que nous avons d�cid� (moi, mon coll�gue et notre responsable de projet) de poll le r�seau (et oui on doit s'occuper du r�seau en plus) uniquement lorsque l'on a la main... �vident vous me direz.
Donc mon applic r�cup des donn�es sur le r�seau et en fonction de ca lance des m�thodes sur un objet. Nous faisons donc un poll de r�seau � chaque fois qu'une m�thode de l'objet se termine et � chaque fois qu'il tente d'acc�der � une variable sensible (vive les mutex et les s�maphores).
On savons quand il acc�de � une variable sensible lorsqu'il fait l'appel �qu'il doit ensuite lib�rer par
Code : S�lectionner tout - Visualiser dans une fen�tre � part mutex.lock()Notre probl�me devient alors comment assurer qu'il n'y aie pas de deadlock en faisant des appels en cascade.
Code : S�lectionner tout - Visualiser dans une fen�tre � part mutex.unlock()
Ex de deadlock :
La premi�re method fait un lock(cond1). Cette condition a �t� locker pr�alablement par une autre fonction qui est a pr�sent termin�e. Comme c'est un lock bloquant, on poll le r�seau et on prend la suivante.
Cette deuxi�me methode fait un lock(cond2) qui est une condition elle aussi lock�e pr�alablement par une autre m�thode alors termin�e. Comme c'est un lock bloquant, on poll le r�seau et on prend la m�thode suivante dans la file d'attente.
par chance cette m�thod fait un unlock(cond1) puis retourne.
On retombe alors dans la deuxi�me m�thode qui attend sur cond2.
Si c'est la premi�re m�thode qui fait un unlock(cond2) juste apr�s sa section critique cond1, on obtient un joli deadlock d'ou il est impossible de sortir.
La seule solution que nous avons trouv� ou en tout cas imagin� avec mon coll�gue c'est d'impl�menter une mini gestion de contexte nous permettant de faire du switching de contexte et ainsi relancer la premi�re m�thode sans que la deuxi�me ne se soit termin�e.
D'ou mes questions :
- Est ce que quelqu'un a d�j� essay� de faire du switching de contexte et pourrais nous donner des pistes de o� chercher ?
-Est ce que c'est � ce point compliquer pour que personne n'en parle ?
- Est ce que quelqu'un connait une bonne doc sur le sujet ? (je sais google est mon ami... ben pas vraiment en fait... parce que ca fait une bonne heure que je cherche et � part des d�finitions de "switching contexte" y a pas grand chose)
-Est ce que quelqu'un � un d�but d'id�e g�nial permettant d'�viter le switching ?
-Est ce que je ferais mieux de me pendre tout de suite ?![]()
-Est ce que quelqu'un a compris ce post vraiment pas clair ?
Voil�... euh.. toutes les r�ponses sont bienvenues �videmment...
Je vous remercie d�j� pour avoir lu et je vous remercie d'avance pour vos r�ponses...
Partager