Вы должны защищать свой код везде, где вы меняете общие данные.
Позвольте мне объяснить вашу ситуацию на примере:
m.lock(); // what does that mean?
// do your business
Ваш мьютекс m - это дверь W C. Если кто-то уже блокируется с другой стороны, то вы не можете go войти. Поэтому, когда ударил m.lock()
, происходят две вещи.
- Проверьте, находится ли кто-нибудь уже за запертой дверью
- Go и заприте дверь
Теперь представьте себе другой путь, ведущий к тому же Ш C но без замка. Просто дверь без охраны.
// No m.lock() here
Независимо от того, заперта ли другая дверь, не имеет значения, любой может присоединиться к W C в любое время (не круто).
Теперь представьте себе третью ситуацию ,
m2.lock();
// Do other stuff
Теперь у вас есть другая дверь, но с другим замком. Таким образом, два человека могут получить доступ к двери одновременно. В аналогии с кодом, если приглушенная ссылка не совпадает, код не является безопасным.