Week 10

Continuing from where we left off last week

  • Rob Pike's Google I/O 2012 - Go Concurrency Patterns: https://youtu.be/f6kdp27TYZs
  • Peter Welch's slides introducing CSP and occam-pi (but we will use Go this semester!)
    • today:
      • Objects Considered Harmful (slide 27 of motivation.pdf slides)
      • even though we won't be programming in occam-pi, I want to give you a flavor of it
      • because:
        • ultimate lightweight processes!
        • composition!
      • Legoland: slide 83-end of basics.pdf

  • Demo and codewalk of csp-dining-philosophers.go
    • Go language features highlighted:
      • channels
      • select
    • Design basis for solution in Go: go routines (processes)
      • room (communicates with philosophers over channels)
        • for philosophers to enter/leave – at most 4 at a time to prevent deadlocking, 5th philosopher blocks
      • forks (communicate with philosophers over channels)
      • philosophers (communicate with forks over channels)

  • Demo and codewalk: Sieve of Eratosthenes (Prime Number Sieve)
    • copy the sample code from my directory to yours:
      • cd into the directory where you have your sample Go code
      • cp -r /home/mlsmith/cs377-examples/Go/sieve.go ~/
    • Go language features highlighted:
      • Only one looping construct in Go: for loop
        • all three parts are optional: init statement, conditional expression, post statement
      • channel declarations in function headers
        • can specify syntactically whether channel is for reading from:
          <-chan

          or writing to:

          chan<-

  • Assignment 5 posted
    • Sort Pump Gophers PDF
    • Due: Friday, April 19th