У попередньому прикладі ми розглянули як керувати простим лічильником за допомогою атомарних лічильників. У більш складних випадках ми можемо скористатись м’ютексами для безпечного доступу до даних в горутинах. |
|
|
|
|
|
Контейнер вміщую мапу лічильників і ми хочемо оновлювати їх одночасно з різних горутин. Ми додаємо мутекс щоб синхронізувати доступ. зауважте що мутекси не повинні бути скопійовані, тому якщо вам потрібно передавати мутекс туди-сюди скористайтесь вказівником. |
|
Замикаємо мутекс перед доступом до лічильників; відмикаємо за допомогою відкладеного виклику перед виходом з функції. |
|
|
|
Можливо використовувати нульове значення мутекса без ініціалізації. |
|
|
|
|
|
Ця функція в циклі інкрементує іменний лічильник. |
|
Запустимо кілька горутин одночасно;
Зауважте що вони мають доступ до самого |
|
Очукуємо завершення горутин |
|
Запуск прогрмми покаже що лічильники оновлені як і планувалось. |
|
Далі ми розглянемо як досягти тогож використовуючи лише канали та горутини. |
Наступний приклад: Stateful Goroutines.