| |||||
| Dernière réponse | |||
|---|---|---|---|
| Sujet : [Java ou C#] Objet de base thread safe?? | |||
| LeGreg |
|
||
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| LeGreg |
|
| benou |
|
| H4dd3R |
|
| H4dd3R |
[jfdsdjhfuetppo]--Message édité par H4dd3R--[/jfdsdjhfuetppo] |
| LeGreg |
|
| LeGreg |
|
| verdoux |
[jfdsdjhfuetppo]--Message édité par Verdoux--[/jfdsdjhfuetppo] |
| benou |
|
| verdoux |
|
| benou | remarque : je viens de voir que les classes synchronisées existaient : http://java.sun.com/products/jts/j [...] ption.html regardez la définition de la classe ... :??: :??: jamais entendu parler de ca ! par contre, j'ai pas trouvé de doc pour savoir à quoi ca correspondait ... à votre avis ? ca synchronise toutes les méthodes d'un coup ? (qu'est ce que ca pourait être d'autre ?) |
| LeGreg |
|
| H4dd3R | Merci!! :)
En gros le seul problème c si R est une énorme classe.. Quel boulot pour overrider les 200 fcts!! ;) C pour ça que je pense qd même qu´une synchronisation sévère pour chaque accès à la mémoire aurait un sens (on s´en fout des perfs).. Bon allez sinon Java remonte ds mon estime merci!! |
| benou |
|
| H4dd3R |
|
| benou |
|
| H4dd3R |
|
| LeGreg |
|
| H4dd3R | Ah enfin on va s´entendre!! :)
Alors non malheureusement je peux pas lui imposer de passer par A pour agir sur R. Car l´utilisateur veut passer des références sur R à d´autres object B, C et D qui sont aussi standarts ni de lui ni de moi, et qui connaissent et utilisent le type R. J´insiste je souhaiterais que l´utilisateur ne se rendre pas compte que ma classe A contient du multithreading. Donc il se posera pas de question au moment de passer des refs sur R.. ;) >sinon, plutot que d'utiliser directement R, tu écris une classe >Rsynch qui hérite de R en surchargeant chacune de ses >méthodes , en les mettant synchronized, et dans chaque méthode >tu fais un super.(lesParamsDeLaMethode) de façon à ce que le >traitement soit le même, mais en synchronisé. Euhh mais si l´utilisateur instancie Rsynch (public de R, c nécessaire pour qu´il puisse encore l´utiliser pour B, C et D), il peut en retirer une référence sur la forme de R non?? -là je parle en venant du C++ dites mois si j´ai faux- Et alors sur sa ref en forme de R il appelle les fcts de base qui sont pas synch?? >- je lis A, je fais des traitements j'ecris B - avec A et B >partages entre plusieurs threads >si ton thread principal fait ca sans poser de verrous >explicitement ton algo aura toujours des resultats >imprevisibles en environnement multithread: la lecture de A >sera synchronisee >ok, l'ecriture de B sera synchronisee ok, mais ca n'a aucun >sens, c'est l'ensemble qu'il faut proteger par des verrous! Dans ce cas je ferais une classe qui encapsule A, B et la méthode de modification A->B, et cette classe je la vérouillerais "magiquement".. :) |
| benou |
|
| LeGreg |
|
| H4dd3R | Stupide, idiot, apprendre ce qu´on me cache.. Quelle bonne ambiance ici!!
Pour info j´ai pas mal d´expérience en multithreading et C++.. Alors grands gourous comment faire: J´ai une classe R qui n´est pas de moi. J´ai une classe A (de moi) qui doit gêrer du multithreading (en pratique pour réagir à de nouvelles images grabbées). Ma classe A, j´ai besoin de lui passer une référence sur R. Alors c bien facile de dire "je dois faire gaffe à locker R avant chaque accès, ceci ds le thread de A et ds le thread principal". Oui mais je maitrise pas le thread principal, c l´utilisateur de ma classe A qui s´en chargera, et je peux pas exiger de lui qu´il se complique la vie. Voilà comment faire?? Si on peut pas résoudre ça en Java (à vous de me le dire), je pense qu´il y a un manque et que ça viendra donc un jour (au détriment de la performance). |
| benou |
[jfdsdjhfuetppo]--Message édité par benou--[/jfdsdjhfuetppo] |
| LeGreg |
|
| darklord | [citation][nom]H4dd3R a écrit[/nomJe me renseignais juste si c´était déjà présent.. Mais j´avais une trop haute opinion de Java je pense que ça arrivera ds de futurs languages. [/citation] Je ne pense pas. Et puis, si je peux me permettre, je trouve stupide de dire que tu es déçu par Java tout simplement parce qu'il gère proprement le multi thread et que tu ne le comprends pas. C'est pas parce que ce n'est pas comme dans ta tête que c'est forcément mauvais. En passant, chapeau à LeGreg qui fait des posts assez admirables pour tout dire :jap: |
| H4dd3R | >C'est stupide et contreperformant.
Merci.. :\ >Tu nous parle de cas general quand il faut traiter >au cas par cas: c'est au concepteur d'identifier les sections Qui nous dit qu´il faut traiter au cas par cas?? Disons plutôt que les languages actuels nous obligent à traiter au cas par cas.. Moi j´aurais rien contre une gestion "magique", même au détriment de la performance.. Je me renseignais juste si c´était déjà présent.. Mais j´avais une trop haute opinion de Java je pense que ça arrivera ds de futurs languages. |
| LeGreg |
|
| LeGreg | dans tous les langages c'est au programmeur
de prevoir le mecanisme de synchronisation !! A+ LEGREG |
| benou | bha non y pourra pas : tu peux pas appeler les méthodes d'une classe mère que la classe fille a surchargé ... |
| H4dd3R | Imagine je dérive ma classe en public d´une autre classe non synchronisée..
Je synchronise tt bien ma classe, n´empêche que l´utilisateur peut tjrs appeler les fcts de la classe mère n´importe comment.. |
| benou |
[jfdsdjhfuetppo]--Message édité par benou--[/jfdsdjhfuetppo] |
| H4dd3R | Oui c bien ce que j´appelle dangereux..
J´aurais souhaité que qd je déclare une instance comme synchronisée, ttes les functions qui accèdent à cette instance le soient aussi automatiquement.. Ze renouvelle ma question pour C# (mais apparemment c pas encore trop utilisé!! ;) ). |
| darklord |
|
| benou | qu'est ce que tu veux dire par ne pas faire gaffe ? |
| H4dd3R | Merci bien..
|
| matafan | En fait en java, certains objets sont thread-safe, certains ne le sont pas. Un exemple : les Vector et les Hastable sont thread-safe, les ArrayList et les HashMap ne le sont pas. Il suffit de consulter le javadoc de l'objet en question pour être fixé.
A noter, en complément de la réponse de benou, que tu peux même gérer la synchronisation à un niveau bien plus fin : plutôt que de simplement déclarer une méthode "synchronized", tu peux acquérir manuellement un lock via le mot clé "synchronized" (c'est le même mot clé, ça ne s'utilise pas de la même manière). Plus d'infos sur http://java.sun.com/docs/books/jls [...] tml#255769. |
| H4dd3R | Ah c bien ça.. C mieux par instance que par classe!! :)
Et qqun sait pour le C#?? |
| benou | en Java les classes ne sont pas thread safe, mais tu peux rendre une instance ou une méthode thread safe avec le mot clef synchronized
edit : incroyable les fautes que j'arrive à faire ... ;) [jfdsdjhfuetppo]--Message édité par benou--[/jfdsdjhfuetppo] |
| H4dd3R | Salut..
J´aimerais savoir si sur l´un des 2 languages ttes les classes sont d´origne thread safe?? Ou est-ce qu´on dot comme en C++ s´occuper (qd c possible :( ) de rajouter des sécurités?? Merci.. :) |




