There are instances when accessing shared values using traditional methods are simpler and more appropriate then the use of channels. The sync package (https://golang.org/pkg/sync/) provides several synchronization primitives including mutual exclusion (mutex) locks and synchronization barriers for safe access to shared values, as discussed in this section.
Mutex locks allow serial access of shared resources by causing goroutines to block and wait until locks are released. The following sample illustrates a typical code scenario with the
Service type, which must be started before it is ready to be used. After the service has started, the code updates an internal bool variable,
started, to store its ...