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

Threads & Processus C++ Discussion :

Deux threads pour une liste


Sujet :

Threads & Processus C++

  1. #1
    Membre expérimenté Avatar de Dalini71
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 181
    Par défaut Deux threads pour une liste
    Bonjour,

    Je dispose d'une liste (de type std::queue), et de 2 threads.

    L'un va écrire dans cette liste (push()), et l'autre va prendre des éléments dans celle-ci (pop()).

    Ma question est donc, est-ce que j'ai besoin d'utiliser un système de mutex/lock pour éviter que l'un lise pendant que l'autre écrit, ou est-ce sans danger ?

    Merci d'avance pour vos réponses.

  2. #2
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,
    En effet, si un des thread modifie la liste alors tous accès (que ce soit lecture ou écriture) doit être protégé par un mutex.

  3. #3
    Membre expérimenté Avatar de Dalini71
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 181
    Par défaut
    Merci pour ta réponse.

    J'en déduis que la STL n'est pas thread-safe.

    Sujet résolu, merci !

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par Arzar Voir le message
    Bonjour,
    En effet, si un des thread modifie la liste alors tous accès (que ce soit lecture ou écriture) doit être protégé par un mutex.
    Pourquoi cela ?

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    En effet, la norme n'impose pas a priori que les conteneurs soient thread safe (une implémentation peut le faire mais ce n'est pas le cas de gcc a priori).
    Une code d'exemple issu de la documentation de boost pour mettre un place un buffer thread safe (basé sur un buffer circulaire mais aucun problème pour adapter) : Bounded Buffer Example

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

Discussions similaires

  1. [Debutant]creer une requete pour une liste deroulante
    Par torNAdE dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/07/2006, 15h22
  2. Réponses: 3
    Dernier message: 30/06/2006, 09h41
  3. Réponses: 3
    Dernier message: 13/04/2006, 18h04
  4. implémenter la notion "au moins" pour une liste d'
    Par mohamed dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 18/08/2004, 00h07
  5. [Debutant(e)]conseil pour une liste ?
    Par Tymk dans le forum Débuter
    Réponses: 5
    Dernier message: 05/08/2004, 14h33

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