2 Concurrency Control
Mutexes
var sum int
var sumLock sync.Mutex
func worker() {
for i := 0; i < 100; i++ {
// locks while read/write data
sumLock.Lock()
new_val := sum + 1
sum = new_val
// unlocks when finished
sumLock.Unlock()
}
}
Channels
sending value into channel
chan <- val
receiving value from channel
var <- chan
func worker(sumChan chan int) {
privSum := 0
for i := 0; i < 100; i++ {
new_val := privSum + 1
privSum = new_val
}
// sending value into channel
sumChan <- privSum
}
func main() {
sumChan = make(chan int)
for i:=0; i < 100; i++ {
go worker(sumChan)
}
sum := 0
for i:=0; i < 100; i++ {
// receiving value from channel
sum += <- sumChan
}
fmt.Println(“sum: %v”, sum)
}