Fonctions | |
void | FredInitialize () |
Initialisation de FRED. | |
void | FredWaitTerminate () |
Attente de fin d'exécution de tous les threads créés. | |
void | FredAbort (char *mess) |
Arrêt brutal du programme et impression d'un message d'erreur. |
|
Implantation
00583 { 00584 printf(" \n FATAL ERROR : "); 00585 printf(mess); 00586 printf("\n"); 00587 exit(1); /* fin du programme */ 00588 } |
|
Implantation La procédure principale main() initialise les variables d'état des différents modules de base, se transforme en un thread principal et lance le nettoyeur leon et le veilleur watchdog.
00538 { 00539 FredMasksInit(); /* initialiser les masques de signaux */ 00540 FredSignalsInit();/* initialiser les traitants de signaux */ 00541 nbFredThreads=0;/* aucun thread n'existe */ 00542 FredQueueInit(&readyQ); /* file vide */ 00543 TimeSharingInit(250); /* initialiser le temps partagé */ 00544 MainThreadInit(); /* forger un pseudo thread principal */ 00545 LeonInit(); /* créer le nettoyeur */ 00546 WatchDogInit(); /* créer le chien de garde */ 00547 } |
|
Implantation Le thread principal se bloque s'il y d'autres threads que le watchdog et leon. Sinon il termine.
00558 { int nonfini=1; 00559 while(nonfini){ 00560 FredMaskOn();/* début d'exclusion mutuelle */ 00561 /* Il y a 2 threads de servitude : leon et watchdog */ 00562 if(nbFredThreads>2) /* il y a d'autres threads */ 00563 /* suspension dans la file d'attente de fin */ 00564 FredThreadSuspend(&endQ); 00565 else /* il n'y a plus que leon et watchdog */ 00566 nonfini=0; 00567 FredMaskOff();/* fin d'exclusion mutuelle */ 00568 } 00569 } |