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 }
|
1.2.17