#include "userlib/syscall.h" #include "userlib/libnachos.h" SemId red; SemId mutex; SemId util; int nblect = 0; int nbWrite = 0; void lecteur() { while(1) { P(red); P(mutex); if (nblect == 0) { V(util); } nblect++; V(mutex); V(red); n_printf("Lecture de l'information \n"); if(nbWrite == 10) return; P(mutex); nblect--; if(nblect == 0) { V(util); } V(mutex); } Exit(nblect); } void redacteur() { while(1) { P(red); P(util); V(red); n_printf((char*)"Ecriture de l'information\n"); nbWrite++; if(nbWrite == 10) return; V(util); } Exit(nbWrite); } int main() { red = SemCreate((char*)"redacteur", 1); mutex = SemCreate((char*)"mutex lecteur redacteur", 1); util = SemCreate((char*)"Mutex util lecteur redacteur", 1); ThreadId lecteurTh = threadCreate((char*)"Lecteur", (VoidNoArgFunctionPtr) lecteur); ThreadId lecteur1 = threadCreate((char*)"Lecteur", (VoidNoArgFunctionPtr) lecteur); ThreadId lecteur2 = threadCreate((char*)"Lecteur", (VoidNoArgFunctionPtr) lecteur); ThreadId redacteurTh = threadCreate((char*)"redacteur", (VoidNoArgFunctionPtr) redacteur); Join(lecteurTh); Join(lecteur1); Join(lecteur2); Join(redacteurTh); return 0; }