go语言--竞争、原子函数、互斥锁

2020-12-13 15:15

阅读:328

标签:其他   tom   img   增加   int   代码   syn   port   one   

一、go语言竞争状态、原子函数、互斥锁

下面代码例子是展示并发下公共数据操作,通过原子函数和互斥锁怎么解决。

package main

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

var(
    // counter是所有goroutine都要增加的变量
    counter int64
    // wg用来等待程序的结束
    wg sync.WaitGroup
    // mutex 用来定义一段代码临界区
    mutex sync.Mutex
)

func main() {
    // 计数加2,表示要等待两个goroutine
    wg.Add(2)
    // 创建两个goroutine
    go incCounter(1)
    go incCounter(2)
    // 等待goroutine结束
    wg.Wait()
    fmt.Println("Final Counter:", counter)
}

// incCounter增加包里counter变量的值
func incCounter(id int) {
    // 延时调用,在函数退出时调用Done来通知main函数工作已经完成
    defer wg.Done()

    for count := 0; count 
  • 下面图片是竞争状态下的数据交互模型

技术图片

go语言--竞争、原子函数、互斥锁

标签:其他   tom   img   增加   int   代码   syn   port   one   

原文地址:https://www.cnblogs.com/wudiffs/p/11576683.html


评论


亲,登录后才可以留言!