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

Langage C++ Discussion :

pthread qui marche.. pas trop


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut pthread qui marche.. pas trop
    bonjour
    je tente d'utiliser la fonction pthread_cond_wait
    mais ça me parait plutôt opaque (et surtout ça marche pas fort)

    j'ai le code suivant
    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
    22
    23
    24
    25
     
    pthread_mutex_t seq_mutex = PTHREAD_MUTEX_INITIALIZER;
    pthread_cond_t seq_var = PTHREAD_COND_INITIALIZER;
    void wait() {
    	cout << "* debut wait" << endl;
    	pthread_mutex_lock(&seq_mutex);
    	cout << ">>>>> signal " << endl;
    	pthread_cond_signal(&seq_var);
    	//pthread_mutex_unlock(&seq_mutex);
    	cout << "* fin wait" << endl;
    }
    void *functionSequement(void *seq) {
    	int i = 0;
    	cout << "- function " << i++ << endl;
    	wait();
    	cout << "- function " << i++ << endl;
    	wait();
    	cout << "- function " << i++ << endl;
    	wait();
    	cout << "- function " << i++ << endl;
    	wait();
    	cout << "- function " << i++ << endl;
    	wait();
    	cout << "- function  " << i++ << endl;
    }
    avec pour l’exécution
    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
    22
    23
     
    if (true) {
    	cout << endl << "* sequencement" << endl;
    	pthread_t thread1;
     
    	pthread_mutex_lock(&seq_mutex);
    	pthread_create(&thread1, NULL, functionSequement, NULL);
    	sleep(2);
    	while (true) {
    		cout << "entrez un caractere ";
    		char c;
    		cin >> c;
    		if (c == 'q')
    			break;
    		if (c == 'x') {
    			cout << "    Attente condition var" << endl;
    			pthread_cond_wait(&seq_var, &seq_mutex);
    			cout << "    Fin attente condition var" << endl;
    		}
    	}
    	cout << " FIN SAISIE" << endl;
    	pthread_join(thread1, NULL);
    }
    le code pthread_cond_wait libere bien le mutex la premier fois mais on se sort jamais du pthread_cond_wait
    j'ai bien tenté de mettre dans le wait() la ligne pthread_mutex_unlock(&seq_mutex);
    mais après on ne retombe pas sur le blocage du mutex et ça donne n'importe quoi

    en fait ce que j'aimerais avoir c'est avec un seul mutex
    - blocage du wait() sur ce mutex
    - pthread_cond_wait libere le mutex
    - dans wait() on signal qu'on a transité
    j'ai tenté tout un tas de configuration mais ca marche pas

    en gros je veux bloquer tout le temps le wait et juste avoir une notification dans le thread main que deblocage c'est bien fait
    c'est pour une sorte de séquenceur

    merci

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 118
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Je dirais qu'il ne faut pas faire un lock, avant le signal. Mais je dois dire que les conditions de pthreads, j'ai trop du mal
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    merci mais ca m'aide pas beaucoup
    ceci étant j'ai aussi d'autres problèmes avec le polymorphisme et les thread ....

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je trouve aussi que cette lib ne marche pas très bien. :/

    Mais bon ce n'est pas la seule...

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 118
    Billets dans le blog
    148
    Par défaut
    Si, elle fonctionne très bien, encore heureux. Sinon, va falloir avoir des arguments solides (aka : un programme minimaliste pour prouver un bogue).

    @ikeas : je n'aide pas beaucoup, car c'est dur à voir ce qui se passe, combien de fois est appelé votre code et ainsi de suite. De plus, vous ne nous donnez pas non plus la sortie. Avez-vous testé ce que j'ai dit ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ouais il me faudrait un code minimaliste, mais, j'ai déjà eu des threads qui ne s'arrêtaient pas, des threads qui ne démarraient pas, des threads qui s'arrêtent avant le thread main (même avec les fonctions join et companie), ...

    Bref si tu n'utilises que deux threads ça va mais une fois que tu utilises plusieurs threads avec des conditions de variables comme c'est le cas ici cette lib ne marche pas très bien. :/

Discussions similaires

  1. script qui marche pas...
    Par jpg dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/10/2004, 14h19
  2. requete(jointure 2 tables) qui marche pas
    Par DaxTaz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2004, 17h50
  3. une comparaison qui marche pas.
    Par gandf dans le forum C++Builder
    Réponses: 7
    Dernier message: 16/02/2004, 15h59
  4. [LG]Split qui marche pas
    Par macluvitch dans le forum Langage
    Réponses: 3
    Dernier message: 30/11/2003, 18h19
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23

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