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

C Discussion :

Synchronisation entre les Thread


Sujet :

C

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Par défaut Synchronisation entre les Thread
    Bonjour,
    Je voudrai synchroniser entre deux thread; je dispose d'un thread qui fait la lecture d'un caractère, un deuxième qui fait l'affichage du caractère.
    L’arrêt de lecture se fait a la rencontre du caractère 'F'.

    Pour le faire,j'utilise les sémaphores de Djikistra, ils me permettent de bloquer le thread Affichage tant qu'il y a une lecture a faire et vise versa.

    Voici le Code:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <pthread.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/ipc.h>
    #include <sys/sem.h>
    #include "djikistra.h"
    #define CLE 1
    #define CL 0
    char c;
    int end=0;
    int sem,sem1; 
    int ent;
     
    void *fonc_lecture(){
    char test;           
        for(;;){   
                P(sem1);  //si le thread affichage est en execution, lecture se bloque*/           
                printf("\nRentrez un caratactere\n");
                scanf("%c",&test);
                c=test;
                printf("c =%c\n",c);
                if(c=='F'){
                    printf("la lettre F");
                    pthread_exit(NULL);
                }
                else{
                //liberer la SC
                V(sem);}
            }   
     
    }
    void *fonc_affichage(){
        for(;;){
            printf("\nje me bloque\n");
            P(sem);
            printf("\nje me débloque\n");
            if(c=='F')
                pthread_exit(NULL);
            printf("%c",c);           
            //liberer la SC
            printf("\nje débloque lecture");
            V(sem1);
        }   
     
    }
    int main(void){
        pthread_t p1;
        pthread_t p2;
        pthread_create(&p1,NULL,fonc_lecture,NULL);
        pthread_create(&p2,NULL,fonc_affichage,NULL);
        sem = sem_create(CLE,0);
        printf("Creation du sémaphore %d \n",sem);
        sem1= sem_create(CL,1);   
        pthread_join(p2,NULL);
        pthread_join(p1,NULL);
        sem_delete(sem);   
        return(0);
    }
    Le problème: le programme bloque quand le caractère rentré est F, même pas l'affichage du message "La lettre F".
    J'ai aussi un problème par rapport a l’espace alloué a une variable, vu que fonc_lecture reste en exécution, l’espace alloué a la variable test est le même, du coup je perd mes caractère

  2. #2
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 097
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 097
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    {   
                P(sem1);  //si le thread affichage est en execution, lecture se bloque*/           
                printf("\nRentrez un caratactere\n");
                scanf("%c",&test);
                c=test;
                printf("c =%c\n",c);
                else{
                //liberer la SC
                V(sem);
                if(c=='F'){
                    printf("la lettre F");
                    pthread_exit(NULL);
                }
    }
    Ce que tu fais, c'est que tu quittes ton thread de lecture avant d'envoyer un signal à ton thread d'affichage. Il faut que tu fasses l'inverse

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Par défaut
    non, je ne peux quitter le thread lecture sans avoir afficher le message: "La lettre F".

    par contre, je dois débloquer le Thread Affichage avant de quitter lecture

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/11/2013, 01h13
  2. synchronisation entre deux threads
    Par chabfive dans le forum Concurrence et multi-thread
    Réponses: 9
    Dernier message: 03/11/2006, 12h17
  3. Réponses: 5
    Dernier message: 28/07/2006, 15h33
  4. Comment partager les ressources entre 2 threads?
    Par remimichot dans le forum Concurrence et multi-thread
    Réponses: 7
    Dernier message: 29/12/2005, 09h17
  5. Synchronisation entre 2 threads
    Par bodbod dans le forum C++
    Réponses: 8
    Dernier message: 20/08/2004, 18h29

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