Week 9

  • Assign 4
    • due: Tue, Mar 31, 11:59pm

  • CSP, Occam, and Golang!
  • Peter Welch's slides introducing CSP and occam-pi (but we will use Go this semester!)
    • Legoland: slides 83–end of basics.pdf
      • remember:
        • everything is a process in occam and CSP, and
        • processes must be composed (explicitly) in sequence (SEQ) or in parallel (PAR)

  • Go demo and starter code
    • copy from Marc's directory into your cs377 course directory:
      $ cd ~/cs377
      $ cd -r /home/mlsmith/cs377-examples/Go ./
    • you should see the following files in your local Go directory:
      $ ls
      csp-dining-phils.go       deadlock.go  sort-pump.go
      csp-dining-phils-orig.go  sieve.go
      $ 
  • Demo and codewalk of csp-dining-philosophers.go
    • Based on an implementation found here
      • on the example given in section 5.3 of Hoare's 1978 CSP paper
      • and diagrammed more closely to the implementation in the CSP Book on p. 57
      • you can copy Marc's Go examples directory into your current directory with this command:
        $ cp -r /home/mlsmith/cs377-examples/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)
    • To run this program:
      $ go run csp-dining-philosophers.go
    • Nondeterminism
      • still!
      • sources?
  • Demo and codewalk: Sieve of Eratosthenes (Prime Number Sieve) 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<-
    • To run this program:
      $ go run sieve.go

  • Assignment 5 posted
    • Sort Pump Gophers PDF
    • see a similar example in occam on slides 13–31 of PHW's replicators lecture notes which can be found here
    • Due: Thu, April 14th