|
В предыдущем примере мы рассмотрели управление простым состоянием счётчика с помощью атомарных операций. Для более сложного состояния можно использовать мьютекс, чтобы безопасно обращаться к данным из нескольких горутин. |
|
![]()
|
|
|
|
|
Container содержит словарь счётчиков; поскольку мы хотим
обновлять его конкурентно из нескольких горутин, добавляем
|
|
|
Блокируем мьютекс перед доступом к |
|
|
|
|
Обрати внимание, что нулевое значение мьютекса готово к использованию, поэтому инициализация здесь не требуется. |
|
|
|
|
|
|
Эта функция увеличивает именованный счётчик в цикле. |
|
|
Запускаем несколько горутин конкурентно; обрати
внимание, что все они обращаются к одному |
|
|
|
|
|
|
Ждём завершения горутин |
|
|
Запуск программы показывает, что счётчики обновились как ожидалось. |
|
|
Далее рассмотрим реализацию той же задачи управления состоянием, используя только горутины и каналы. |
Далее: Горутины с состоянием.