parent
f4cc6a382d
commit
0c3b8807dd
@ -0,0 +1,35 @@
|
|||||||
|
package goConcurrency
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
wg := sync.WaitGroup{}
|
||||||
|
// 计数器
|
||||||
|
counter := 0
|
||||||
|
// 多个goroutine并发的累加计数器
|
||||||
|
gs := 1000
|
||||||
|
wg.Add(gs)
|
||||||
|
lck := sync.Mutex{}
|
||||||
|
for i := 0; i < gs; i++ {
|
||||||
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
|
// 累加
|
||||||
|
for k := 0; k < 100; k++ {
|
||||||
|
lck.Lock()
|
||||||
|
counter++
|
||||||
|
lck.Unlock()
|
||||||
|
// ++ 操作不是原子的
|
||||||
|
// counter = counter + 1
|
||||||
|
// 1. 获取当前的counter变量
|
||||||
|
// 2. +1
|
||||||
|
// 3. 赋值新值到counter
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
// 统计计数结果
|
||||||
|
wg.Wait()
|
||||||
|
fmt.Println("Counter:", counter)
|
||||||
|
}
|
@ -0,0 +1,55 @@
|
|||||||
|
package goConcurrency
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestSyncErr(t *testing.T) {
|
||||||
|
SyncErr()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncLock(t *testing.T) {
|
||||||
|
SyncLock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncMutex(t *testing.T) {
|
||||||
|
SyncMutex()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncLockAndNo(t *testing.T) {
|
||||||
|
SyncLockAndNo()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncRLock(t *testing.T) {
|
||||||
|
SyncRLock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncMapErr(t *testing.T) {
|
||||||
|
SyncMapErr()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncSyncMap(t *testing.T) {
|
||||||
|
SyncSyncMap()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncSyncMapMethod(t *testing.T) {
|
||||||
|
SyncSyncMapMethod()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncAtomicAdd(t *testing.T) {
|
||||||
|
SyncAtomicAdd()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncAtomicValue(t *testing.T) {
|
||||||
|
SyncAtomicValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncPool(t *testing.T) {
|
||||||
|
SyncPool()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncOnce(t *testing.T) {
|
||||||
|
SyncOnce()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncCond(t *testing.T) {
|
||||||
|
SyncCond()
|
||||||
|
}
|
Loading…
Reference in new issue