Add mutex

This commit is contained in:
Sangeeth Sudheer 2024-05-01 16:09:07 +05:30
parent c23e699122
commit 58ffd80d36
Signed by: x
GPG Key ID: F6D06ECE734C57D1
2 changed files with 48 additions and 2 deletions

View File

@ -15,7 +15,8 @@ package main
// import "git.sangeeth.dev/gobyexample/workerpools" // import "git.sangeeth.dev/gobyexample/workerpools"
// import "git.sangeeth.dev/gobyexample/waitgroups" // import "git.sangeeth.dev/gobyexample/waitgroups"
// import "git.sangeeth.dev/gobyexample/ratelimiting" // import "git.sangeeth.dev/gobyexample/ratelimiting"
import "git.sangeeth.dev/gobyexample/atomics" // import "git.sangeeth.dev/gobyexample/atomics"
import "git.sangeeth.dev/gobyexample/mutex"
func main() { func main() {
// runes.Runes() // runes.Runes()
@ -33,5 +34,6 @@ func main() {
// workerpools.WorkerPools() // workerpools.WorkerPools()
// waitgroups.WaitGroups() // waitgroups.WaitGroups()
// ratelimiting.RateLimiting() // ratelimiting.RateLimiting()
atomics.Atomics() // atomics.Atomics()
mutex.Mutex()
} }

44
mutex/mutex.go Normal file
View File

@ -0,0 +1,44 @@
package mutex
import (
"fmt"
"sync"
"time"
)
type container struct {
mu sync.Mutex
counter map[string]int
}
func Mutex() {
var wg sync.WaitGroup
c := container{
counter: map[string]int{
"a": 0,
"b": 0,
},
}
increment := func(key string, times uint) {
c.mu.Lock()
defer c.mu.Unlock()
time.Sleep(200 * time.Millisecond)
for range times {
c.counter[key]++
}
wg.Done()
}
wg.Add(3)
go increment("a", 1000)
go increment("b", 1000)
go increment("a", 1000)
wg.Wait()
fmt.Printf("counter after all increment() calls: %v\n", c.counter)
}