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