Week 12

  • Lecture Notes: PDF
  • Assignment 6
    • Due Thu, April 23
    • Versions 2 and 3 from slides 11, 12 of PDF
      • (version 1 included in sample code)
      • 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! LOL

      • 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
  • Shear Sort (time permitting)
    • Lecture notes: PDF