golang處理高併發

golang處理高併發,保證線性安全的各種方式

package main

import (
 "fmt"
 "sync"
 "sync/atomic"
)


func main() {
 var num int64
 var wg sync.WaitGroup

 for i := 0; i < 1000; i ++ {
  wg.Add(1)
  go func() {
   defer wg.Done()
   atomic.AddInt64(&num, 1)
  }()
 }

 wg.Wait()
 fmt.Println(num)
}

func main() {
 var num int
 var wg sync.WaitGroup
 var ch = make(chan bool, 1)

 for i:=0; i<1000; i++ {
  wg.Add(1)
  go func() {
   defer wg.Done()
   ch <- true
   num ++
   <-ch
  }()
 }

 wg.Wait()

 fmt.Println(num)
}

func main() {
 var num int
 var mutex sync.Mutex
 var wg sync.WaitGroup

 for i:=0; i<100000; i++ {
  wg.Add(1)
  go func() {
   defer wg.Done()
   defer mutex.Unlock()
   mutex.Lock()
   num ++
  }()
 }

 wg.Wait()
 fmt.Println(num)
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章