October 2015
Beginner to intermediate
400 pages
14h 44m
English
You may wonder why the Balance method needs mutual exclusion,
either channel-based or mutex-based.
After all, unlike Deposit, it consists only of a single
operation, so there is no danger of another goroutine executing “in the
middle” of it.
There are two reasons we need a mutex.
The first is that it’s equally important that Balance not
execute in the middle of some other operation like Withdraw.
The second (and more subtle) reason is that synchronization is about
more than just the order of execution of multiple goroutines;
synchronization also affects memory.
In a modern computer there may be dozens of processors, each with its own local cache of the main memory. For efficiency, writes to memory are buffered within ...