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)
}