Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1506 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  problème avec synchronized

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème avec synchronized

n°679118
bibi218
Posté le 21-03-2004 à 10:01:34  profilanswer
 

Bonjour à tous
 
Voilà, j'ai une classe pour laquelle j'utilise l'interface Runnable, pour pouvoir gérer des threads multiples.
J'avais quelques bugs, que je pense dûs à des accès simultanés par plusieurs threads à un même objet. Donc forcément, je regarde ma doc, et je tombe sur synchronized()
Je fais donc un truc du genre
 
synchronized(a) {
    synchronized(b) {
        a.methode(b);
    }
}
 
mais là, je constate que mon programme se bloque maintenant (ça freeze) ... quelqu'un aurait-il une explication possible à me donner ???

mood
Publicité
Posté le 21-03-2004 à 10:01:34  profilanswer
 

n°679122
verdoux
And I'm still waiting
Posté le 21-03-2004 à 10:19:24  profilanswer
 

deadlock ?

n°679126
bibi218
Posté le 21-03-2004 à 10:26:52  profilanswer
 

Je ne sais pas ... je ne vois pas pourquoi ... j'ai pas de boucles infinies ... il y a même pas de boucles dans la méthode en question, juste du If et du Else :s Franchement, c'est dur de faire plus simple ...
Si un thread attend indéfiniment sont tour, j'avoue que je ne vois pas pourquoi

n°679128
verdoux
And I'm still waiting
Posté le 21-03-2004 à 10:28:50  profilanswer
 

Fuadrait voir ton code mais si t'as 2 objets qui essaient de se synchroniser l'un par rapport à l'autre avec des prises de lock inversées, ça peut bloquer.

n°679132
bibi218
Posté le 21-03-2004 à 10:33:06  profilanswer
 

je crois que je vois l'idée ...
Parmi les threads que j'ai lancés, il y en a un qui appellera
 
synchronized(a) {  
    synchronized(b) {  
        a.methode(b);  
    }  
}  
 
et un autre qui est susceptible de faire
 
synchronized(b) {  
    synchronized(a) {  
        b.methode(a);  
    }  
}  
 
mais dans ce cas, pourquoi on n'a pas juste une attente de liberation des objets utilisés par le 1er thread servi ???

n°679138
nraynaud
lol
Posté le 21-03-2004 à 11:06:02  profilanswer
 

parce que si le premier thread prend a et attend b alors que le second prend b en attendant a, ils risquent de s'attendre longtemps (étreinte fatale).


---------------
trainoo.com, c'est fini
n°679146
bibi218
Posté le 21-03-2004 à 11:12:13  profilanswer
 

Comment faire alors, pour préciser un ordre d'exécution explicite ??? Car les deux actions doivent être effectuées quand même :(

n°679153
benou
Posté le 21-03-2004 à 11:19:48  profilanswer
 

si tu es dans un dans un IDE passe en mode débug et quand tu programme se bloque met le en pause et regarde où sont bloqués tes threads. Sinon, si tu lances ton prg dans un shell, tu peux envoyer un signal au process pour lui demander d'afficher les stacktrace des threads. Mais je ne me souviens plus de la commande Ctrl+ kekchose ...

n°679156
nraynaud
lol
Posté le 21-03-2004 à 11:22:41  profilanswer
 

tu rajoutes un 3ème objet qui sera synchronyzed par tes 2 taches avant de tenter de locker a ou b par exemple.  
 

Code :
  1. synchronized(c){
  2.   synchronized(a){
  3.     synchronized(b){
  4.       ...
  5.     }
  6.   }
  7. }


 
 
Ou alors tu change complètement de pattern de synchronisation.


---------------
trainoo.com, c'est fini
n°679159
bibi218
Posté le 21-03-2004 à 11:32:30  profilanswer
 

oki merci, ça a l'air de marcher ça... je vais filer ça à ma binôme, qui a l'art de faire planter mes progs :p Comme ça je serai vite fixé ;) Mici m'sieur

mood
Publicité
Posté le 21-03-2004 à 11:32:30  profilanswer
 

n°679327
nraynaud
lol
Posté le 21-03-2004 à 17:16:22  profilanswer
 

la synchronisation, ça se teste pas, ça se prouve au papier/crayon/vérificateur de code.


---------------
trainoo.com, c'est fini
n°679393
the real m​oins moins
Posté le 21-03-2004 à 19:07:22  profilanswer
 

nraynaud a écrit :

la synchronisation, ça se teste pas, ça se prouve au papier/crayon/vérificateur de code.

boh, doit y'avoir moyen de faire des unit tests (certes un peu tordus mais bon)

n°679399
nraynaud
lol
Posté le 21-03-2004 à 19:19:13  profilanswer
 

the real moins moins a écrit :

boh, doit y'avoir moyen de faire des unit tests (certes un peu tordus mais bon)

oué, et tu fais comment la couverture là-dessus ?


---------------
trainoo.com, c'est fini
n°679409
the real m​oins moins
Posté le 21-03-2004 à 19:31:15  profilanswer
 

nraynaud a écrit :

oué, et tu fais comment la couverture là-dessus ?

j'ai dit "doit y'avoir moyen", pas "je sais comment faire" ;)
 
mais c'est vrai que bon [:meganne]

n°679412
nraynaud
lol
Posté le 21-03-2004 à 19:36:45  profilanswer
 

the real moins moins a écrit :

j'ai dit "doit y'avoir moyen", pas "je sais comment faire" ;)

Par des méthodes formelles, mais puisque l'on passe en formel, autant faire toute la preuve d'un seul coup.
 
J'ai déjà posté un lien sur un outil de ce type.


---------------
trainoo.com, c'est fini
n°680545
veryfree
Posté le 22-03-2004 à 19:10:48  profilanswer
 

benou a écrit :

si tu es dans un dans un IDE passe en mode débug et quand tu programme se bloque met le en pause et regarde où sont bloqués tes threads. Sinon, si tu lances ton prg dans un shell, tu peux envoyer un signal au process pour lui demander d'afficher les stacktrace des threads. Mais je ne me souviens plus de la commande Ctrl+ kekchose ...


ctrol + pause?

n°680551
benou
Posté le 22-03-2004 à 19:18:08  profilanswer
 

veryfree a écrit :


ctrol + pause?


:jap:
 
c'est un truc à mettre dans la java faq ca !  
 
ce qui est sympa c'est quand tu as un deadlock, ca te l'indique :)


---------------
ma vie, mon oeuvre - HomePlayer
n°680555
veryfree
Posté le 22-03-2004 à 19:20:25  profilanswer
 

benou a écrit :


:jap:
 
c'est un truc à mettre dans la java faq ca !  
 
ce qui est sympa c'est quand tu as un deadlock, ca te l'indique :)


 
c'est toi qui me l a appris ce truc hein  [:veryfree]
 
 
source


Message édité par veryfree le 22-03-2004 à 19:21:44
n°680559
benou
Posté le 22-03-2004 à 19:23:37  profilanswer
 

veryfree a écrit :


c'est toi quie me l a appris ce truc hein  [:veryfree]  


je me souvenais que j'avais aidé quelqu'un avec ce truc :whistle:  
 
je me fais vieux, je perds la mémoire [:serial coder]


---------------
ma vie, mon oeuvre - HomePlayer
n°680563
veryfree
Posté le 22-03-2004 à 19:33:52  profilanswer
 

j'ai edité :o

n°680565
benou
Posté le 22-03-2004 à 19:38:08  profilanswer
 


déjà a l'époque je m'en souvenais plus [:ddr555]
 
faut dire que ca sert pas non plus tous les jours ce truc ...


---------------
ma vie, mon oeuvre - HomePlayer
n°680569
veryfree
Posté le 22-03-2004 à 19:42:06  profilanswer
 

en tout ca pour moi ce fut tres efficace [:joce]

n°680572
benou
Posté le 22-03-2004 à 19:43:51  profilanswer
 

veryfree a écrit :

en tout ca pour moi ce fut tres efficace [:joce]


clair ! :)
 
quand je me relis je me demande comment je suis arrivé à trouvé ton problème à partir de ca [:mlc2]. j'étais en forme ce jour là [:dawa]


---------------
ma vie, mon oeuvre - HomePlayer
n°680574
veryfree
Posté le 22-03-2004 à 19:45:32  profilanswer
 

tu nous a tous epaté je crois :jap:

n°680674
nraynaud
lol
Posté le 22-03-2004 à 22:04:41  profilanswer
 

Le jour où je trouve une étreinte fatale dans un de mes logiciels, je suis pas près de dormir !
 
On fois qu'on en a trouvé une, qui prouve que c'est pas truffé de conneries ?


---------------
trainoo.com, c'est fini
n°700342
pascal34
one point !
Posté le 15-04-2004 à 16:25:59  profilanswer
 

Faire des synchronized en cascade c'est jamais bon.
 
Il faudrait avoir un point d'entrée unique pour l'obtention de resources partagées.
 
 
 

n°701485
kazh
Posté le 16-04-2004 à 22:37:48  profilanswer
 

Sinon je pense qu'en changeant l'ordre ça devrait marcher :
synchronized(a) {  
    synchronized(b) {  
        a.methode(b);  
    }  
}  
   
synchronized(a) {  
    synchronized(b) {  
        b.methode(a);  
    }  
}  
 
nan ?

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  problème avec synchronized

 

Sujets relatifs
probleme de creation de table associatif sous ms sql severProbleme Formulaire a envoyer par mail
probleme avec while ...Probleme ! C inside
Probleme de new, tableau, * , ou & ?Probleme à l'affichage d'une requete
Probleme de table sous Power AMC! HelpProblème Java MySQL
Probleme de compilationProbleme pour supprimer une valeur dans ma bdd
Plus de sujets relatifs à : problème avec synchronized


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR