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:
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