千家信息网

sync.Mutex互斥锁的原理及使用方法

发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,这篇文章主要讲解了"sync.Mutex互斥锁的原理及使用方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"sync.Mutex互斥锁的原理及使用方法
千家信息网最后更新 2025年02月22日sync.Mutex互斥锁的原理及使用方法

这篇文章主要讲解了"sync.Mutex互斥锁的原理及使用方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"sync.Mutex互斥锁的原理及使用方法"吧!

说明:

互斥锁用来保证在任一时刻,只能有一个例程访问某对象。Mutex 的初始值为解锁状态。Mutex 通常作为其它结构体的匿名字段使用,使该结构体具有 Lock 和 Unlock 方法。Mutex 可以安全的在多个例程中并行使用。

sync.Mutex 源码解读

// Locker 接口包装了基本的 Lock 和 UnLock 方法,用于加锁和解锁。type Locker interface {    Lock()    Unlock()}// Lock 用于锁住 m,如果 m 已经被加锁,则 Lock 将被阻塞,直到 m 被解锁。func (m *Mutex) Lock()// Unlock 用于解锁 m,如果 m 未加锁,则该操作会引发 panic。func (m *Mutex) Unlock()

demo

package mainimport (        "fmt"        "sync"        "time")type Work struct {        sync.Mutex}func main() {        work := Work{}        done := make(chan int)        for i := 0; i < 10; i++ {                go func(i int) {                        work.Lock()                        defer work.Unlock()                        time.Sleep(1 * time.Second)                        done <- i                }(i)        }        for i := 0; i < 10; i++ {                n := <-done                fmt.Println(time.Now().Format("15:04:05"), n)        }}

output

liqiongtao:test liqiongtao$ go run main.go 18:23:10 118:23:11 218:23:12 318:23:13 018:23:14 918:23:15 418:23:16 518:23:17 618:23:18 718:23:19 8

感谢各位的阅读,以上就是"sync.Mutex互斥锁的原理及使用方法"的内容了,经过本文的学习后,相信大家对sync.Mutex互斥锁的原理及使用方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0