[C] probleme execution thread en C
le pape
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
le pape Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
le pape Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
salut tout le monde
j'ai besoin de votre aide pour m'aider a resoudre un petit probleme d'execution de mon programme en C-ANSI
ce programme permet de creer 2 thread et de les utiliser (rien de bien sorcier normalement).
je le compile sous linux (debian) en utilisant la commande
gcc -c thread1.c -o thread1 -lpthread
voila mon code:
#include <stdio.h>
#include <string.h>
#include <pthread.h>
void * traiteTh1(void *);
void * traiteTh2(void *);
int main()
{
int err, val, res;
pthread_t idThread[2];
char mess[1024], ret;
void * ptrRetVal;
printf("\nentrez une phrase : \n");
fgets(mess,1024,stdin);
printf("entrez une valeur : \n");
scanf("%d",& val);
err=pthread_create(& idThread[0], NULL, traiteTh1, (void *)& val);
if (err!=0)
{
perror("creation du thread 1 impossible");
exit(0);
}
err=pthread_create(& idThread[1], NULL, traiteTh2, (void *)& mess);
if (err!=0)
{
perror("creation du thread 2 impossible");
exit(0);
}
err=pthread_join(idThread[0], & ptrRetVal);
if (err!=0)
{
perror("join du thread 1 impossible");
exit(0);
}
res=* ((int *)ptrRetVal);
printf("TID du thread1: %u\n",idThread[0]);
printf("resultat retourne : %d\n", res);
err=pthread_join(idThread[1], ptrRetVal);
if (err!=0)
{
perror("join du thread 2 impossible");
exit(0);
}
printf("TID du thread2: %u\n",idThread[1]);
printf("%s\n", ptrRetVal);
}
void * traiteTh1(void * num)
{
int val, res;
printf("numero du TID du thread1: %u\n", pthread_self());
val=*((int *)num);
printf("valeur entrez : %d\n",val);
res=val*2;
pthread_exit((void *)& res);
}
void * traiteTh2(void * ch)
{
char * res={"message de thread2 : "},* mess;
mess=((char *) ch);
printf("numero du TID du thread2: %u\n", pthread_self());
printf("chaine de caracteres entree : %s\n",ch);
strcat(res,mess); /* mon PB est ici apparement*/
return((void *) res);
}
quand je l'execute dans le terminal il me dit:
entrez unz phrase :
salut
entrez une valeur :
12
numero du TID du thread1: 16386
valeur entrez : 12
numero du TID du thread2 : 32771
chaine de carractere entrree : salut
TID du thread1 : 16386
resultat retourne : 24
erreur de segmentation
je remercie d'avance toute personne essayant de m'aider et bonne chance
j'ai besoin de votre aide pour m'aider a resoudre un petit probleme d'execution de mon programme en C-ANSI
ce programme permet de creer 2 thread et de les utiliser (rien de bien sorcier normalement).
je le compile sous linux (debian) en utilisant la commande
gcc -c thread1.c -o thread1 -lpthread
voila mon code:
#include <stdio.h>
#include <string.h>
#include <pthread.h>
void * traiteTh1(void *);
void * traiteTh2(void *);
int main()
{
int err, val, res;
pthread_t idThread[2];
char mess[1024], ret;
void * ptrRetVal;
printf("\nentrez une phrase : \n");
fgets(mess,1024,stdin);
printf("entrez une valeur : \n");
scanf("%d",& val);
err=pthread_create(& idThread[0], NULL, traiteTh1, (void *)& val);
if (err!=0)
{
perror("creation du thread 1 impossible");
exit(0);
}
err=pthread_create(& idThread[1], NULL, traiteTh2, (void *)& mess);
if (err!=0)
{
perror("creation du thread 2 impossible");
exit(0);
}
err=pthread_join(idThread[0], & ptrRetVal);
if (err!=0)
{
perror("join du thread 1 impossible");
exit(0);
}
res=* ((int *)ptrRetVal);
printf("TID du thread1: %u\n",idThread[0]);
printf("resultat retourne : %d\n", res);
err=pthread_join(idThread[1], ptrRetVal);
if (err!=0)
{
perror("join du thread 2 impossible");
exit(0);
}
printf("TID du thread2: %u\n",idThread[1]);
printf("%s\n", ptrRetVal);
}
void * traiteTh1(void * num)
{
int val, res;
printf("numero du TID du thread1: %u\n", pthread_self());
val=*((int *)num);
printf("valeur entrez : %d\n",val);
res=val*2;
pthread_exit((void *)& res);
}
void * traiteTh2(void * ch)
{
char * res={"message de thread2 : "},* mess;
mess=((char *) ch);
printf("numero du TID du thread2: %u\n", pthread_self());
printf("chaine de caracteres entree : %s\n",ch);
strcat(res,mess); /* mon PB est ici apparement*/
return((void *) res);
}
quand je l'execute dans le terminal il me dit:
entrez unz phrase :
salut
entrez une valeur :
12
numero du TID du thread1: 16386
valeur entrez : 12
numero du TID du thread2 : 32771
chaine de carractere entrree : salut
TID du thread1 : 16386
resultat retourne : 24
erreur de segmentation
je remercie d'avance toute personne essayant de m'aider et bonne chance
A voir également:
- [C] probleme execution thread en C
- Le service spouleur d'impression local n'est pas en cours d'exécution - Guide
- Le service sans fil windows n'est pas en cours d'exécution sur cet ordinateur - Forum WiFi
- Net user des erreurs ont affecté l'exécution de la commande - Forum Windows
- Compte thread - Accueil - Réseaux sociaux
- Il permet l’exécution des logiciels applicatifs et gère l’utilisation des ressources matérielles (mémoire, processeur, périphériques). ✓ - Forum Windows 10