begin process at 2012 05 30 13:50:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

threads et semaphores


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

threads et semaphores

samedi 23 avril 2005 à 14:59:51 | threads et semaphores

liliefr2000

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

 

 

samedi 23 avril 2005 à 15:56:33 | Re : threads et semaphores

dreamkiller_52

c'est un thread d'exclusion mutuel ou mutex qu'il te faut apparament(j suis pas sur) fait une recherche sur SetEvent () voila
dimanche 24 avril 2005 à 21:18:21 | Re : threads et semaphores

MetalDwarf

Non ca ne peut pas etre ca car ce que dreamkiller propose c est une fonction de l'API windows alors que ton programme est POSIX.
Desole de ne pas t apporter une reponse, mais en tout cas ce n'est pas SetEvent()

dimanche 24 avril 2005 à 23:00:57 | Re : threads et semaphores
dimanche 24 avril 2005 à 23:31:01 | Re : threads et semaphores

Hylvenir

Salut,
pourquoi tu vas à la fin avec un de tes threads
au lieu de lire les indices pairs pour un thread et impair pour l'autre ?
Tu n'auras pas besoin de mutex comme ça, chaque thread lisant
son jeu propre d'indice. En plus tu ne parcours pas le tableau
pour rien.


Ma participation à la saturation du net:
http://hylvenir.free.fr
jeudi 26 janvier 2006 à 23:08:49 | Re : threads et semaphores

cminus

Comme tu les threads n'accèdent qu'en lecture au tableau, il n'y besoin ni de sémphore ni de mutex.
Laisse les threads aller au bout de leurs boucles ensuite faire la moyenne si on veut !

Salutations

MINUS


Cette discussion est classée dans : int, include, thread, somme, pthread


Répondre à ce message

Sujets en rapport avec ce message

Problème incompréhensible [ par JosueClement ] Regardez plutot...Ce programme est une sorte d'horloge!Il n'y a aucune erreur de compilation, mais les heures n'augmentent jamais!!A la ligne 54, j'ai J'ai créé un jeu de course mais .... [ par arconius ] Voila j'ai voulu créé un jeu de course de bonhommes mais étant débutant je suis confronté à un problème, mon bonhomme descend normalement dans le circ Dans le genre prenant........ [ par Xs ] oui !c 'est trés chiant !j'explique mon pb : j'ai un code source, fais par moi-meme, et dedans, je veux que l'on saisisse des renseignement comme le l Probleme reception sur un serveur windows en vc++ [ par alfred ] Salut a tous!!g un probleme dans mon serveur le recv renvoie la valeur -1 et je ne vois pas pouquoi, toute mes socket sont positives le client envois Serveur Vc++6 pb dans recv [ par alfred ] Salut a tousJ'ai un probleme dans mon serveur et je ne sais pas comment le resoudre. Le client se connecte bien et envoie le bon nombre de caracteres Pb Chaîne de caractères [ par mmuller57 ] Bonjour,J'ai créé un petit programme qui convertit les caractères d'une chaîne de caractères par leurs codes ASCII :#include #include #include int con Un caractère rébarbatif. [ par Nini ] Bon alors voilà ma source :#include #include "iostream.h"#include "iomanip.h"#include "math.h"char mult(int a, int b){ if (b%a==0) cout <<"Vrai ("<<b< Difference [ par xionoxid ] C'est koi la difference entre time (0) et time (NULL) les 2 font des nbr aleatoire !??#include #include #i Problemes de fonctions (niveau debutant) [ par zzzzzz ] en fait je veut faire un programme console dans le but de me familiariser avec les fonctions que je maitrise pas et que je veux apprendre. en francais une fiche de renseignement [ par cabarrus ] je cherche à faire un programme qui demande des renseignements pour pouvoir ensuite les affiché comme une fiche d'identité!!!voici monprogramme mais m


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales