Compare commits
1 Commits
lect_red
...
demo_files
Author | SHA1 | Date | |
---|---|---|---|
4694b92491 |
26
Makefile
26
Makefile
@ -1,13 +1,6 @@
|
|||||||
TOPDIR=.
|
TOPDIR=.
|
||||||
include $(TOPDIR)/Makefile.config
|
include $(TOPDIR)/Makefile.config
|
||||||
|
|
||||||
#
|
|
||||||
# Demo vars
|
|
||||||
#
|
|
||||||
FLAGS=--offline -r --
|
|
||||||
CARGO=RUSTFLAGS=-Awarnings cargo run ${FLAGS}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
all: dumps user_lib instruction_tests syscall
|
all: dumps user_lib instruction_tests syscall
|
||||||
#
|
#
|
||||||
@ -35,21 +28,4 @@ clean:
|
|||||||
$(MAKE) clean -C userlib/
|
$(MAKE) clean -C userlib/
|
||||||
$(MAKE) clean -C test/
|
$(MAKE) clean -C test/
|
||||||
$(RM) -rf $(TOPDIR)/target
|
$(RM) -rf $(TOPDIR)/target
|
||||||
|
|
||||||
#
|
|
||||||
# Demo targets
|
|
||||||
#
|
|
||||||
halt: syscall
|
|
||||||
${CARGO} -x ./target/guac/halt.guac -d3
|
|
||||||
|
|
||||||
pc: syscall
|
|
||||||
${CARGO} -x ./target/guac/producteur_consommateur.guac -d2
|
|
||||||
|
|
||||||
matmult: syscall
|
|
||||||
${CARGO} -x ./target/guac/matmult.guac -d2
|
|
||||||
|
|
||||||
lr: syscall
|
|
||||||
${CARGO} -x ./target/guac/lecteur_redacteur.guac -d2
|
|
||||||
|
|
||||||
prints: syscall
|
|
||||||
${CARGO} -x ./target/guac/prints.guac -d2
|
|
@ -1,4 +1,4 @@
|
|||||||
PROGRAMS = halt.guac prints.guac producteur_consommateur.guac lecteur_redacteur.guac join.guac matmult.guac
|
PROGRAMS = halt.guac prints.guac producteur_consommateur.guac join.guac matmult.guac
|
||||||
TOPDIR = ../..
|
TOPDIR = ../..
|
||||||
include $(TOPDIR)/Makefile.rules
|
include $(TOPDIR)/Makefile.rules
|
||||||
|
|
||||||
|
@ -1,60 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@ -12,9 +12,10 @@ SemId splein;
|
|||||||
void producteur() {
|
void producteur() {
|
||||||
for(int i = 0; i < 10; i++)
|
for(int i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
n_printf("batir une information\n");
|
// n_printf("batir une information\n");
|
||||||
P(svide);
|
P(svide);
|
||||||
iplein = (iplein + 1) % N;
|
iplein = (iplein + 1) % N;
|
||||||
|
n_printf("Envoie de l'information\n");
|
||||||
// n_printf("communique une information : %d\n", i);
|
// n_printf("communique une information : %d\n", i);
|
||||||
tab[iplein] = i;
|
tab[iplein] = i;
|
||||||
V(splein);
|
V(splein);
|
||||||
|
Reference in New Issue
Block a user