Як ми вже дізнались, основним механізмом роботи управлінням стану
в Go є, канали комунікації (або комунікація каналами).
Ми побачили це на прикладі “пулу працівників” на додадчу
до інших випадків.
Але існують і інші способи управління станом та асинхронністю,
розглянемо, наприклад, пакет |
|
|
|
|
|
|
|
Ось ми використаємо беззнакове ціле для представлення нашого (завжди додатнього) лічильника. |
|
WaitGroup допоможе нам зачекати поки усі горутини завершать свою роботу. |
|
Для симуляції одночасних оновлень, ми запускаємо 50 горутин, які оновлюватимуть лічильник рівно 1000 разів. |
|
To atomically increment the counter we use |
|
|
|
|
|
Чекаємо поки усі горутини не відпрацюють. |
|
Жодна горутина не записує до ‘ops’, але використаємо
|
|
|
Ми очікувано отримали рівно 50000 операцій.
Як би ми використали не атомарний ‘ops++’
числа б - були інші. Ми доречі можемо
отримувати дані про стан гонки даних
коли запускаємо з прапорцем |
|
Надалі ми ознайомимось з |
Наступний приклад: Взаємні Виключення (Mutexes).