Download pseudo source code

 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
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