MST

星途 面试题库

面试题:Go中Mutex锁如何保障单个变量的并发安全

在Go语言中,假设有一个全局变量`count`,多个协程会对其进行读写操作。请描述如何使用`Mutex`锁来保障`count`的并发安全,并给出简单的代码示例。
32.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 原理
    • Mutex(互斥锁)是Go语言标准库sync包提供的一种同步原语。当一个协程获取到Mutex锁后,其他协程在该锁被释放前无法获取该锁,从而避免多个协程同时读写共享变量count,保证了并发安全。
  2. 代码示例
package main

import (
    "fmt"
    "sync"
)

var (
    count int
    mu    sync.Mutex
)

func increment(wg *sync.WaitGroup) {
    defer wg.Done()
    mu.Lock()
    count++
    mu.Unlock()
}

func main() {
    var wg sync.WaitGroup
    numRoutines := 100
    for i := 0; i < numRoutines; i++ {
        wg.Add(1)
        go increment(&wg)
    }
    wg.Wait()
    fmt.Println("Final count:", count)
}

在上述代码中:

  • 定义了全局变量countmuMutex类型)。
  • increment函数用于对count进行自增操作,在操作前通过mu.Lock()获取锁,操作完成后通过mu.Unlock()释放锁。
  • main函数中启动了100个协程并发执行increment函数,使用sync.WaitGroup等待所有协程完成,最后输出count的最终值。