Précédent   Forum des professionnels en informatique > Systèmes > Linux > Réseau
Réseau Vos questions autour des réseaux et télécoms sous Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/02/2011, 17h41   #1
Membre à l'essai
 
Inscription : décembre 2009
Messages : 128
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 128
Points : 20
Points : 20
Par défaut comment créer n thread

Bonjour
j'ai à faire un programme qui doit créer n thread , n donnée par l'utilisateur, chaque thread afficher son tid.
facile
moi, je me bloque au niveau de la variable :
pthread_t th;
comment peux-je la généraliser ?
le probléme que à chaque thread crée on attribue un variable pour lui seulement.
bin, voilà mon essai cas même :
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
 
#include<stdio.h>
#include<unistd.h>
#include<pthread.h>
#include<yscall.h>
 
void * fct (void* arg)
{
     pid_t tid=syscall(__NR_getpid)
     printf("mon tid est: %d \n",tid);
     sleep(10);
     return 0;
}
int main()
{
     int i,n;
     printf("taper n \n");
     scanf("%d",&n);
     for(i=1;i<=n;i++)
     {
         pthread_t th;
         //on cree le proc
         pthread_create(&th,NULL,&fct,NULL);
    }
    return 0;
}
le programme s’exécute correctement sauf qu'il crée un seul thread !!
je pense que le problème vient de la variable "th", mais comment pourrai-je créer n variable de ce type?!!


merci bien de m'aider
hindou90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2011, 20h17   #2
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
peux-tu controler la valeur de pthread_create

Citation:
RETURN VALUE
If successful, the pthread_create() function shall return zero; other-
wise, an error number shall be returned to indicate the error.
  • EAGAIN The system lacked the necessary resources to create another thread, or the system-imposed limit on the total number of threads in a process {PTHREAD_THREADS_MAX} would be exceeded.
  • EINVAL The value specified by attr is invalid.
  • EPERM The caller does not have appropriate permission to set the required scheduling parameters or scheduling policy.
The pthread_create() function shall not return an error code of [EINTR].
Quelle valeur de n saisie tu?

Pour controller/gerer ce que font tes thread, il pourrait être sage de les gérer dans un tableau ou une liste

ici tu trouver un tutorial interessant
https://computing.llnl.gov/tutorials/pthreads/
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2011, 20h36   #3
Membre à l'essai
 
Inscription : décembre 2009
Messages : 128
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 128
Points : 20
Points : 20
merci pour votre réponse
ok, mais pour la dernière valeur de retour de pthread_create, qu'est veux dire ?
est ce qu'il y a une limite pour le n ?
si oui ou peux-je savoir la limite ,par PTHREAD_THREADS_MAX?
si oui comment l'utiliser ?

merci bien pour la conseil
hindou90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2011, 20h44   #4
Membre à l'essai
 
Inscription : décembre 2009
Messages : 128
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 128
Points : 20
Points : 20
le nombre que je donne à n est 2
hindou90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2011, 23h57   #5
Membre à l'essai
 
Inscription : décembre 2009
Messages : 128
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 128
Points : 20
Points : 20
bon, voilà j'ai pensé à créer un tableau contenat les variables threads:
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
 
#include<stdio.h>
#include<unistd.h>
#include<pthread.h>
#include<yscall.h>
#include<malloc>
void * fct (void* arg)
{
     pid_t tid=syscall(__NR_getpid)
     printf("mon tid est: %d \n",tid);
     sleep(10);
     return 0;
}
int main()
{
     int i,n;
     printf("taper n \n");
     scanf("%d",&n);
     pthread_t *threads;
     threads=malloc(sizeof(threads)*n);
     for(i=1;i<=n;i++)
     {
 
         pthread_create(&th[i],NULL,&fct,NULL);
    }
    return 0;
}
lorsque j'execute ce programme, il me créer les n threads mais avec le même tid, c'est comme c'est un seul thread répéter n fois
hindou90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 00h13   #6
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
pour le thread id tu peux essayer cela (posix):
http://www.kernel.org/doc/man-pages/...ad_self.3.html

ou ça qui est plus linux specifique:
http://www.kernel.org/doc/man-pages/.../gettid.2.html

Note: ces deux méthodes ne retourneront pas forcement la même valeur

Par contre le pid ne change pas car tes threads sont tous dans le même processus.

De plus je te conseil d'utiliser pthread_join pour attendre la fin de chacun de tes threads.
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 00h35   #7
Membre à l'essai
 
Inscription : décembre 2009
Messages : 128
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 128
Points : 20
Points : 20
merci bien pour votre réponse.
bon,quelle bête suis-je ?!!
au lieu de gettid j'ai écrit getpid
et maintenant ça marche très bien

meci beaucoup à vous
hindou90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 01h23   #8
Membre à l'essai
 
Inscription : décembre 2009
Messages : 128
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 128
Points : 20
Points : 20
SVP, quelle est la valeur max que "n" ne doit pas dépasser ?
c'est 2000,n'est ce pas ?
hindou90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 10h01   #9
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
Citation:
Envoyé par hindou90 Voir le message
SVP, quelle est la valeur max que "n" ne doit pas dépasser ?
c'est 2000,n'est ce pas ?
C'est dépendant de l'implémentation de pthread sur ton système.

Sous linux cette limite peux être trouvé avec
Code :
1
2
 
 cat /proc/sys/kernel/threads-max
Ensuite tu peux jouer avec setrlimit/getrlimit
http://www.kernel.org/doc/man-pages/...trlimit.2.html
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 15h31   #10
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 464
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 464
Points : 9 585
Points : 9 585
Bonjour,

Citation:
Envoyé par hindou90 Voir le message
SVP, quelle est la valeur max que "n" ne doit pas dépasser ?
c'est 2000,n'est ce pas ?
Ca depend si tu cherches la valeur absolue à ne pas dépasser (celle que ton système n'acceptera pas), ou bien la valeur raisonnable à ne pas dépasser. Cette dernière est bien inférieure à la première, mais dépend fortement de ton programme.
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h17.


 
 
 
 
Partenaires

Hébergement Web