-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsistema.c
More file actions
41 lines (39 loc) · 1.48 KB
/
sistema.c
File metadata and controls
41 lines (39 loc) · 1.48 KB
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
#include "sistema.h"
//Criacao das threads
void startThreads(ResourcesSystem s, Process p)
{
pthread_t process_thread;
ProcessThread process = (ProcessThread)malloc(sizeof(ProcessThread));
(*process).thread = process_thread;
(*process).process = p;
pthread_create(&process_thread, NULL, executeProcess, process);
}
//Executa Processos
void *executeProcess(void *p)
{
int running = 1;
int seg_sleep = 0;
while (running)
{
Process pTemp = (*(ProcessThread)p).process;
//Solicita permissão para alocar recurso
if (requisicao_recursos((*pTemp).pid, (*pTemp).resources) == 0) //caso haja recurso
{
printf("Processo %d: Alocou Recursos.\n", (*pTemp).pid);
seg_sleep = (rand() % 2) + 1;
sleep(seg_sleep); //Dorme um tempo random
printf("Processo %d: Entrou em Sleep. %d Segundos\n", (*pTemp).pid, seg_sleep);
libera_recursos((*pTemp).pid, (*pTemp).resources);
seg_sleep = (rand() % 2) + 1;
sleep(seg_sleep);
printf("Processo %d: Entrou em Sleep. %d Segundos\n", (*pTemp).pid, seg_sleep);
printf("Processo %d: Desalocou Recursos.\n", (*pTemp).pid);
//Devo finalizar a thread?
}
else //caso não haja mais recursos disponiveis
{
running = 0; //Caso deseja finalizar a thread
printf("Alocacao de recursos para PROCESSO %d falhou, encerrando thread.\n", (*pTemp).pid);
}
}
}