Salut la liste !

J'ai un gros probl�me qui me turlupine :
J'impl�mente le lock sur une pseudo base de donn�es, donc Thread de 
requ�te en lecture avec mutex qui va bien pour interdire de lire pendant 
une �criture, tout �a, mais ... j'ai eu droit � un magnifique deadlock 
syst�me pour mon Thread o� l'application gelait (tout le reste marchait).
J'ai d�couvert apr�s moult essais et une nuit blanche que le "join" du 
Thread "provoquait" ce plantage, parce qu'en fait le Thread de lecture 
appelait une m�thode  "getRecord()" synchroniz�e qui utilisait elle m�me 
2 autes sous-m�thodes synchroniz�es ("dataBase.seek()" et 
"dataBase.readRecord()"). En virant le "join" le Thread passait, mais 
�videmment c'est foireux � mort car le "join" est quand m�me une 
instruction qui DOIT marcher en toutes circonstances, et il m'a fallu 
virer le "synchronized" des 2 sous-m�thodes ("dataBase.seek()" et 
"dataBase.readRecord()") pour que le Thread passe avec son "join" associ�.
Je suis sous Windows-98 (mais pour une fois il n'y est pour rien), SDK 
1.3 derni�re version.
Evidemment, aucune lev�e d'exception, le Thread seul g�le l'application 
seule, tout le reste fonctionne, aucun message syst�me ou autre.
Quelqu'un pourrait il m'�clairer sur ce comportement vicieux, digne peut 
�tre des pratiques commerciales de $Soft mais certainement pas de notre 
langege favori ? Il para�t qu'on a des probl�mes analogues sous Solaris 
(qui n'y est pour rien non plus), et encore je n'ai pas essay� sous 
Linux avec les greenThreads et nativeThreads :-(( .
En particulier en enlevant le "synchronized" des 2 sous-m�thodes, avec 
des Threads concurrents en lecture prot�g�s par un MUTEX (lectures 
multiples mais une seule �criture, et pas de lecture pendant une 
�criture), ai je un risque de recouvrement, les op�rations seront elles 
atomiques, ou dois je carr�ment forcer une lecture � la fois ?

@ ++ !

-- 
Eric LEMAITRE
CNAM Computer Engineer, MS/CS
Certified Java Programmer, Cisco Network & Design Associate, Linux RedHat Engineer & 
Trainer
Java : SCJP2 (#H3CPAR00B0)
Cisco : CCNA (#CSCO10300611), CCDA (#CSCO10437862)
Linux RedHat : RHCE (#806099741300292), RHCX


Répondre à