Mutex в value-ресивере

Что выведетMiddleпроверка — Спринт08-t008

Структура Box с map и sync.Mutex, методы объявлены с value-ресивером. 1200 горутин вызывают Put. Что произойдёт при выполнении? Почему? Как исправить?

main.gogo
1package main2 3import (4	"fmt"5	"sync"6)7 8type Box struct {9	data map[int]int10	mu   sync.Mutex11}12 13func (b Box) Put(i int) {14	b.mu.Lock()15	b.data[i%5]++16	b.mu.Unlock()17}18 19func (b Box) Dump() {20	for k, v := range b.data {21		fmt.Println("key = ", k, "value = ", v)22	}23}24 25func NewBox() Box {26	return Box{27		data: make(map[int]int),28	}29}30 31func RunTest() {32	b := NewBox()33	wg := sync.WaitGroup{}34	for i := 0; i < 1200; i++ {35		wg.Add(1)36		go func(k int) {37			defer wg.Done()38			b.Put(k)39		}(i)40	}41	wg.Wait()42	b.Dump()43}44 45func main() {46	RunTest()47}
Чем закончится программа?
Сначала подумай без запуска — на собесе компилятора не будет.