bonjour
J'ai un probleme,je souhaite a l'aide de deux threads calculer la somme des entiers contenu dans un tableau..pour cela le premier thread va commence le tableau en partant de son debut et le deuxime thread va parcourir le tableau a partir de la fin.Ces deus threads doivent s'arreter lorsqu'il se rencontrerons et on aditionnera les deux somme obtenues.Le probleme est que si on autorise au deux thread d'acceder a la case du tableau ou il vont se rencontrer cette case sera comprise dans les deux sommes et donc additionnée deux fois.J'aimerai pour cela utiliser un semaphore qui controlera l'entree dans cette case.Mais je n'y arrive pas.Pouvez vous m'aider?.
Voiila le code sans semaphore:
#include <stdio.h>
#include <errno.h>
#include <signal.h>
#define taille 5000000
#include <sys/types.h>
#include <sys/shm.h>
#include <pthread.h>
#include <stdlib.h>
int i=0;
int j=taille-1;
int som1=0;
int som2=0;
int res, tab[taille];
void* pro1()
{
while(i<j)
{
som1=som1+tab[i];
i++;
}
pthread_exit(0);
}
void* pro2()
{
while(i<j)
{
som2=som2+tab[j];
j--;
}
pthread_exit(0);
}
int main()
{
int k;
pthread_t th1;
pthread_t th2;
void * ret;
for( k=0;k<=taille-1;k++)
{
tab[k]=1;
}
if(pthread_create(&th1,NULL,pro1,"1")<0)
{
fprintf(stderr,"pthread_create error for thread 1\n");
exit(1);
}
if(pthread_create(&th2,NULL,pro2,"2")<0)
{
fprintf(stderr,"pthread_create error for thread 2\n");
exit(1);
}
(void)pthread_join(th1,&ret);
(void)pthread_join(th2,&ret);
res=som1+som2;
printf("L'indice i : %d\n",i);
printf("L'indice j : %d\n",j);
printf("la somme des valeurs de tableaux est :%d \n",som1);
printf("la somme des valeurs de tableaux est :%d \n",som2);
printf("la somme des valeurs de tableaux est :%d \n",res);
}
Merci d'avance