61 lines
1.4 KiB
C
61 lines
1.4 KiB
C
|
#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;
|
||
|
}
|