type Mutex struct{
state int32
sema uint32
}
var x=0
var wg sync.WaitGroup
var lock sync.Mutex
func add(){
for i:=0;i<50000;i++{
lock.Lock()
x=x+1
lock.Unlock()
}
wg.Done()
}
func main(){
wg.Add(2)
go add()
go add()
wg.Wait()
fmt.Println(x)
}
package main
import (
"fmt"
"sync"
"time"
)
var (
x = 0
wg sync.WaitGroup
lock sync.Mutex
rwLock sync.RWMutex
)
func read() {
defer wg.Done()
rwLock.RLock()
fmt.Println(x)
time.Sleep(time.Millisecond)
rwLock.RUnlock()
}
func write() {
defer wg.Done()
rwLock.Lock()
fmt.Println(x)
x = x + 1
time.Sleep(time.Millisecond)
rwLock.Unlock()
}
func main() {
start := time.Now()
for i := 0; i < 100; i++ {
go write()
wg.Add(1)
}
for i := 0; i < 1000; i++ {
go read()
wg.Add(1)
}
wg.Wait()
fmt.Println(time.Now().Sub(start))
}
var icons map[string]image.Image
var loadIconsOnce sync.Once
func loadIcons(){
icons =map[string]image.Image{
"left": loadIcon("left.png"),
"up": loadIcon("up.png"),
"right":loadIcon("right.png"),
"down":loadIcon("down.png"),
}
}
func Icon(name string)image.Image{
loadIconsOnce.Do(loadIcons)
return icons[name]
}
package main
import (
"fmt"
"strconv"
"sync"
)
var m2 = sync.Map{}
func main() {
wg := sync.WaitGroup{}
for i := 0; i < 20; i++ {
wg.Add(1)
go func(n int) {
key := strconv.Itoa(n)
m2.Store(key, n)
value, _ := m2.Load(key)
fmt.Printf("k=%v,v=%v\n", key, value)
wg.Done()
}(i)
}
wg.Wait()
}
package main
import (
"fmt"
"sync"
"sync/atomic"
)
var x int64
var wg sync.WaitGroup
var lock sync.Mutex
func add() {
lock.Lock()
x = x + 1
lock.Unlock()
wg.Done()
}
func add2() {
atomic.AddInt64(&x, 1)
wg.Done()
}
func main() {
wg.Add(100000)
for i := 0; i < 100000; i++ {
go add()
}
fmt.Println(x)
}