1. Задача: Что выведет следующий код и через какое время? Как его исправить?
package main
import (
"fmt"
"time"
)
const numRequests = 10000
var count int
func networkRequest() {
time.Sleep(time.Millisecond) // Эмуляция сетевого запроса.
count++
}
func main() {
for i := 0; i < 10000; i++ {
networkRequest()
}
fmt.Println(count)
}Ответ
Возможное решение с использованием atomic и WaitGroup:
package main
import (
"fmt"
"sync"
"time"
"sync/atomic"
)
var count int64
var mtx sync.Mutex
func networkRequest() {
time.Sleep(time.Millisecond) // Эмуляция сетевого запроса.
atomic.AddInt64(&count, 1)
}
func main() {
wg := sync.WaitGroup{}
for i := 0; i < 10000; i++ {
wg.Add(1)…