Week 10
Channels, CSP, and Go
- Peter Welch's Occam-pi Lecture Notes
- Go demo and starter code
- copy from Marc's directory into your
cs377
course directory:$ cd ~/cs377 $ cp -r /home/mlsmith/cs377-examples/Go ./
- you should see the following files in your local
Go
directory:$ ls csp-dining-phils.go phils-out.txt sieve.go sort-pump.go $
- 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)
- To run this program:
$ go run csp-dining-philosophers.go
- 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
- Due: Friday, Nov 18th