Merge branch 'lect_red' into 'main'
ajout lecteur redacteur See merge request simpleos/burritos!22
This commit is contained in:
commit
a16d92ab7e
2
Makefile
2
Makefile
@ -40,7 +40,7 @@ clean:
|
||||
# Demo targets
|
||||
#
|
||||
halt: syscall
|
||||
${CARGO} -x ./target/guac/halt.guac -d2
|
||||
${CARGO} -x ./target/guac/halt.guac -d3
|
||||
|
||||
pc: syscall
|
||||
${CARGO} -x ./target/guac/producteur_consommateur.guac -d2
|
||||
|
@ -1,4 +1,4 @@
|
||||
PROGRAMS = halt.guac prints.guac producteur_consommateur.guac join.guac matmult.guac
|
||||
PROGRAMS = halt.guac prints.guac producteur_consommateur.guac lecteur_redacteur.guac join.guac matmult.guac
|
||||
TOPDIR = ../..
|
||||
include $(TOPDIR)/Makefile.rules
|
||||
|
||||
|
60
test/syscall_tests/lecteur_redacteur.c
Normal file
60
test/syscall_tests/lecteur_redacteur.c
Normal file
@ -0,0 +1,60 @@
|
||||
#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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user