-
Wilke Pierre authoredWilke Pierre authored
mutest2.c 1.14 KiB
#include "kernel/types.h"
#include "kernel/fcntl.h"
#include "user/user.h"
char fname[] = "moncompteur";
#define MAXLEN 20
int freadint(){
int res = -1;
char buf[MAXLEN];
int fd = open(fname, O_RDONLY);
if(read(fd, buf, MAXLEN) > 0){
res = atoi(buf);
}
close(fd);
return res;
}
void fwriteint(int i){
int fd = open(fname, O_CREATE | O_RDWR);
fprintf(fd, "%d\n", i);
close(fd);
}
#define NITER 100
void inc(int mut){
for(int i = 0; i < NITER; i++){
acquire_mutex(mut);
int val = freadint();
fwriteint(val+1);
release_mutex(mut);
}
}
void dec(int mut){
for(int i = 0; i < NITER; i++){
acquire_mutex(mut);
int val = freadint();
fwriteint(val-1);
release_mutex(mut);
}
}
int main(){
fwriteint(100);
int mut = create_mutex();
int pid = fork();
if(pid < 0){
printf("error fork\n");
exit(1);
} else if (pid == 0){
inc(mut);
exit(0);
} else {
pid = fork();
if(pid < 0){
printf("error fork\n");
exit(1);
} else if (pid == 0){
dec(mut);
exit(0);
}
wait(0);
wait(0);
printf("Result = %d\n", freadint());
exit(0);
}
}