9.4 Memory Synchronization
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 ...
Get The Go Programming Language now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.