versions from slides 11 and 12 are the versions to implement
Extra challenge:
version 3 from slide 23
run with multiple producers / consumers from the command line
Tech notes:
to pass a command line parameter into your ruby program (i.e., so each producer/consumer knows its id), use the ARGV array like this:
id = ARGV[0]
then use a for loop from the bash prompt to run multiple producers/consumers:
$ for i in {1..3}
> do ruby producer.rb $i &
> done
and similarly to launch a different number of consumers
Demo: Marc will attempt a live demo running multiple producers and consumers from his version 3 – hope this works!
Tech notes 2:
alternatively, we could seed TS with producer/consumer id tuples
instead of passing in command line arguments via ARGV array
then each producer process can ts.take their producer id tuple, and
each consumer process can do the same for their consumer id tuple
arguably, this is more in the spirit of a Linda/TS program, and less dependent on how different OS's provide support for launching Linda processes with command line arguments.
Discussion: modeling one model of concurrency with another
shared memory (critical sections, etc.)
Golang: channels (message passing)
Ruby/Rinda: Linda and Tuple Space
We don't always get to choose our language/library/stack