golang互斥锁的两种实现

Posted 顶级开发者社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang互斥锁的两种实现相关的知识,希望对你有一定的参考价值。

1. 用Mutex实现

package main
import ( "fmt" "sync")
var num intvar mtx sync.Mutexvar wg sync.WaitGroup
func add() { mtx.Lock()
defer mtx.Unlock() defer wg.Done()
num += 1}
func main() { for i := 0; i < 100; i++ { wg.Add(1) go add() }
wg.Wait()
fmt.Println("num:", num)}

2. 使用chan实现

package main
import ( "fmt" "sync")
var num int
func add(h chan int, wg *sync.WaitGroup) { defer wg.Done()
h <- 1 num += 1 <-h}func main() { ch := make(chan int, 1) wg := &sync.WaitGroup{}
for i := 0; i < 100; i++ { wg.Add(1) go add(ch, wg) }
wg.Wait()
fmt.Println("num:", num)}


以上是关于golang互斥锁的两种实现的主要内容,如果未能解决你的问题,请参考以下文章

golang sync.Mutex互斥锁的实现原理

golang读写锁与互斥锁的性能比较

LockSupport.java 中的 FIFO 互斥代码片段

golang读写锁实现与核心原理分析

Redis实现分布式锁(设计模式应用实战)

Redis实现分布式锁(设计模式应用实战)