Next: Terminaison d'un thread
Up: Implantation
Previous: Implantation
  Contents
La mise en place d'un thread se fait par la commande :
thr_create(stack_addr, stack_size, start_routine, arg,
flags, thread_id)
- stack_addr = adresse de la pile ou NULL
- stack_size = taille de la pile ou 0 (1 Mo par défaut).
- start_routine = adresse de la procédure associée sous forme
d'un pointeur sur une fonction
- arg = paramètres passés à la procédure.
- thread_id : identificateur du thread. Invisible à
l'extérieur du processus.
Les flags passés à la commande détermine son mode de
fonctionnement :
- flags =
- THR_SUSPENDED : crée le thread en mode ``suspendu''.
Nécessite un thr_continue pour lancer véritablement le
processus. Nécessaire lorsque l'on veut synchroniser les
threads.
- THR_BOUND : associe le thread à un LWP spécifique.
- THR_DETACHED : crée le thread en mode ``détaché''
(disparaît automatiquement à la fin de son exécution - pas
besoin de thr_join -- voir paragraphe 4.2).
- THR_NEW_LWP : crée un nouveau LWP (raccourcis pour
set_concurrency).
- THR_DAEMON : crée le thread en mode ``daemon thread'' (non
standard) indépendant du processus. Ne peuvent être
``attendus''.
[linewidth=1pt,fillstyle=solid,shadow=true](-0.5,0)(17.5,-19)
Ex : création de 10 threads
#include <thread.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#define NTHREADS 10
void * athread(void * arg)
{
printf("thread ID: %2d, arg: %2d\n",thr_self(),(int)arg);
return(0);
}
void main(int argc, char * argv[])
{
int i,n;
thread_t
list[NTHREADS];
for (i=0;i<NTHREADS;++i) {
n=thr_create(NULL,0,athread,i,0,&list[i]);
if (n) {
fprintf(stderr,"thr_create: %s\n",strerror(n));
exit(1);
}
}
for(i=0;i<NTHREADS;++i) {
if (n=thr_join(list[i],NULL,NULL)) {
fprintf(stderr,"thr_create: %s\n",strerror(n));
exit(1);
}
}
return(0);
}
Next: Terminaison d'un thread
Up: Implantation
Previous: Implantation
  Contents
Arnaud Revel
2001-11-26