(18条消息) Go语言自学系列 | golang并发编程之Mutex互斥锁实现同步_COCOgsta的博客-CSDN博客



Go语言自学系列 | golang并发编程之Mutex互斥锁实现同步

COCOgsta 已于 2022-04-09 20:59:51 修改 183 收藏
分类专栏: 视频学习笔记 文章标签: golang go

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-CSDN博客


除了使用channel实现同步之外,还可以使用Mutex互斥锁的方式实现同步。

  1. 1
    package main
  2. 2
  3. 3
    import (
  4. 4
    "fmt"
  5. 5
    "sync"
  6. 6
    "time"
  7. 7
    )
  8. 8
  9. 9
    var m int = 100
  10. 10
  11. 11
    var lock sync.Mutex
  12. 12
  13. 13
    var wt sync.WaitGroup
  14. 14
  15. 15
    func add() {
  16. 16
    defer wt.Done()
  17. 17
    lock.Lock()
  18. 18
    m += 1
  19. 19
    time.Sleep(time.Millisecond * 10)
  20. 20
    lock.Unlock()
  21. 21
    }
  22. 22
  23. 23
    func sub() {
  24. 24
    defer wt.Done()
  25. 25
    lock.Lock()
  26. 26
    time.Sleep(time.Millisecond * 2)
  27. 27
    m -= 1
  28. 28
    lock.Unlock()
  29. 29
    }
  30. 30
  31. 31
    func main() {
  32. 32
    for i := 0; i < 100; i++ {
  33. 33
    go add()
  34. 34
    wt.Add(1)
  35. 35
    go sub()
  36. 36
    wt.Add(1)
  37. 37
    }
  38. 38
  39. 39
    wt.Wait()
  40. 40
    fmt.Printf("m: %v\n", m)
  41. 41
    }
  42. 42
  43. 43

运行结果

  1. 1
    [Running] go run "d:\SynologyDrive\软件开发\go\golang入门到项目实战\goproject\360duote.com\pro01\test.go"
  2. 2
    m: 100


yg9538 July 22, 2022, 10:48 p.m. 242 收藏文档