-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathprodutor_consumidor_classico.py
More file actions
71 lines (54 loc) · 1.75 KB
/
Copy pathprodutor_consumidor_classico.py
File metadata and controls
71 lines (54 loc) · 1.75 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import threading
# Prof. Gustavo Wagner, gugawag@gmail.com
# IFPB - Sistemas Operacionais
# Explicacao: solucao classica para o problema do produtor-consumidor, com espera ocupada.
# Propensa a condicoes de disputa
TAMANHO_BUFFER = 10
contador = 0
buffer = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
entrada = 0
saida = 0
item_produzido = 0
class Produtor:
def __init__(self):
pass
def produzir(self):
global contador
global entrada
global saida
global buffer
global TAMANHO_BUFFER
global item_produzido
while True:
# produz um item em next_produced
while contador == TAMANHO_BUFFER:
continue # não faz coisa alguma
item_produzido += 1
buffer[entrada] = item_produzido # item produzido
print('Produtor - Produzido item ', buffer[entrada])
entrada = (entrada + 1) % TAMANHO_BUFFER
contador += 1
class Consumidor:
def __init__(self):
pass
def consumir(self):
global contador
global entrada
global saida
global buffer
global TAMANHO_BUFFER
print(contador, entrada, saida, len(buffer), TAMANHO_BUFFER)
while True:
while contador == 0:
continue # não faz coisa alguma
item_consumido = buffer[saida]
print('Consumidor - Consumido item ', item_consumido)
saida = (saida + 1) % TAMANHO_BUFFER
contador -= 1
# consome o item item_consumido
produtor = Produtor()
consumidor = Consumidor()
t_produtor = threading.Thread(target=produtor.produzir)
t_consumidor = threading.Thread(target=consumidor.consumir)
t_produtor.start()
t_consumidor.start()