golang并发编程_01

一、并发编程模板

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

    wg.Add(1)
    go func() {
        defer wg.Done()
        // to do
    }()

    wg.Add(1)
    go func() {
        defer wg.Done()
        // todo
    }()

    wg.Wait()

}

二、锁住共享资源

1. 原子函数

var counter int64 //多个goroutine都会增加其值的变量

//如果在goroutine中要对counter执行加法,那么要用原子操作
atomic.AddInt64(&counter, 1) //对counter加1

另外两个有用的原子函数是 LoadInt64 和 StoreInt64.

2. 互斥锁

互斥锁用于在代码上创建一个临界区,保证同一时间只有一个 goroutine 可以执行这个临界区代码。

var (
    mutex sync.Mutex //定义一把互斥锁
    counter int      //多个goroutine要操作的变量
)


mutex.Lock()
{
    counter = 10

}
mutex.Unlock()

三、通道channel

当一个资源需要在 goroutine 之间共享时,通道在 goroutine 之间架起了一个管道,并提供了确保同步交换数据的机制。

1. 创建通道

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值