IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[Thread] Obtenir l'accès exclusif d'un objet


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 31
    Points : 28
    Points
    28
    Par défaut [Thread] Obtenir l'accès exclusif d'un objet
    Bonjour,

    j'aurais besoins de votre aide pour résoudre un problème de concurrence.

    J'ai un objet (SerialComm) qui représente une communication avec le port série. Sur cet objet, je peux appeler read(...) et write(...). Du coup, j'utilise deux Locks pour empêcher que plusieurs Thread lisent ou écrivent en même temps. Jusque là, pas de soucis.

    Maintenant, je voudrais qu'un Thread puisse avoir un accès exclusif sur l'objet. C'est a dire qu'un Thread puisse dire "maintenant l'objet SerialComm est sous mes ordres" et qu'a partir de ce moment, aucun autre Thread ne peut écrire ou lire tant que le Thread précédent n'as pas relâcher l'objet. Est-ce que c'est possible? Si oui comment?

    Un bout de code à quoi ça ressemble maintenant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    public class SerialComm
    {
      	private final Lock lockRead = new ReentrantLock();
      	private final Lock lockWrite = new ReentrantLock();
     
      	...
     
      	public int read()
      	{
      	  	lockRead.lock();
      	  	try
      	  	{
      	  	  	...
      	  	}
      	  	finally
      	  	{
      	  	  	lockRead.unlock();
      	  	}
     	}
    }
    Merci d'avance pour votre aide.

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Points : 17
    Points
    17
    Par défaut ReadWriteLock
    Un ReadWriteLock garantirait l'exclusivité entre les locks reads et le lock write. Ceci-dit dans ton cas, je ne pense pas que l'accès au port série puisse être partagé, donc un seul lock doit suffire, il faut le prendre pour tous les accès au matériel.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 31
    Points : 28
    Points
    28
    Par défaut
    Finalement, la solution utilisé est d'avoir une seconde classe héritant de SerialComm ayant un attribut contenant un objet (son adresse). Il suffit d'assigner l'objet voulu et de vérifier lors d'un read/write que c'est le bon objet (passé en paramètre) et d'accepter le read/write ou de le mettre en wait. Ensuite, lorsque l'on relâche la connexion série (null dans l'attribut objet), on fait un notify pour réveiller ceux qui attendent.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/09/2013, 16h04
  2. [C#][ProgressBar]Obtenir les données depuis un autre objet
    Par Kcirtap dans le forum Windows Forms
    Réponses: 7
    Dernier message: 26/10/2005, 11h56
  3. Obtenir le style CSS d'un objet
    Par Sub0 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/08/2005, 15h46
  4. [POO] probleme d'acces aux parametres un objet
    Par lejert dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/04/2005, 09h13
  5. Réponses: 17
    Dernier message: 04/04/2005, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo