Week 9
Assignment: Dining Java Philosophers
- Assign 4
- due: Tue, Mar 31, 11:59pm
Channels (cont039;d)
- CSP, Occam, and Golang!
- Peter Welch039;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 Marc039;s directory into your
cs377course directory:$ cd ~/cs377 $ cd -r /home/mlsmith/cs377-examples/Go ./
- you should see the following files in your local
Godirectory:$ 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 Hoare039;s 1978 CSP paper
- and diagrammed more closely to the implementation in the CSP Book on p. 57
- you can copy Marc039;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