procedure main(argc, argv[]):
if argc = 8 then
shared unit_count := integer(argv[1])
shared producer_count := integer(argv[2])
shared consumer_count := integer(argv[3])
shared producer_min_delay := integer(argv[4])
shared producer_max_delay := integer(argv[5])
shared consumer_min_delay := integer(argv[6])
shared consumer_max_delay := integer(argv[7])
shared queue := create_integer_queue()
shared next_unit := 0
shared consumed_count := 0
declare producers := create_threads(producer_count, produce)
declare consumers := create_threads(consumer_count, consume)
join_threads(producers)
join_threads(consumers)
end if
end procedure
procedure produce:
while next_unit < unit_count do
next_unit := next_unit + 1
declare my_unit := next_unit
delay(random_between(producer_min_delay, producer_max_delay))
enqueue(queue, my_unit)
print("Produced ", my_unit)
end while
end procedure
procedure consume:
while consumed_count < unit_count do
consumed_count := consumed_count + 1
declare my_unit := dequeue(queue)
print("\tConsuming ", my_unit)
delay(random_between(consumer_min_delay, consumer_max_delay))
end while
end procedure
function random_between(min, max):
return min + rand() % (max - min)
end function