31 lines
487 B
Go
31 lines
487 B
Go
package letter
|
|
|
|
import (
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
// MyConcurrentFrequency ...
|
|
func MyConcurrentFrequency(input []string) FreqMap {
|
|
var ProcMap = struct {
|
|
sync.RWMutex
|
|
m map[rune]int
|
|
}{m: make(map[rune]int)}
|
|
|
|
var procCnt = len(input)
|
|
for _, chunk := range input {
|
|
go func(chunk string) {
|
|
for _, rn := range chunk {
|
|
ProcMap.Lock()
|
|
ProcMap.m[rn]++
|
|
ProcMap.Unlock()
|
|
}
|
|
procCnt--
|
|
}(chunk)
|
|
}
|
|
for procCnt > 0 {
|
|
time.Sleep(time.Millisecond)
|
|
}
|
|
return ProcMap.m
|
|
}
|