-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcorridaDeLebres.c
48 lines (36 loc) · 1.01 KB
/
corridaDeLebres.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(){
int tam_pista, quant_lebres, pgid = 0;
int pid_p = getpid();
printf("Quantas lebres competem? ");
scanf("%d", &quant_lebres);
printf("Qual é o tamanho da pista? ");
scanf("%d", &tam_pista);
for(int i = 0; i < quant_lebres; i++){
if(getpid() == pid_p){
if(i == 0)
pgid = fork();
else
fork();
}
if(getpid() != pid_p){
setpgid(0, pgid);
int dis_percorrida = 0, jump;
while(dis_percorrida < tam_pista * 100){
jump = rand() % 100;
dis_percorrida += jump;
printf("[lebre %d] pulei %d totalizando %d\n", i+1, jump, dis_percorrida);
usleep(100);
}
printf("Lebre %d VENCEU\n", i+1);
killpg(pgid,SIGKILL);
}
}
wait(NULL);
return 0;
}