这篇文章主要讲解了“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 main
import (
"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 1
18:23:11 2
18:23:12 3
18:23:13 0
18:23:14 9
18:23:15 4
18:23:16 5
18:23:17 6
18:23:18 7
18:23:19 8
感谢各位的阅读,以上就是“sync.Mutex互斥锁的原理及使用方法”的内容了,经过本文的学习后,相信大家对sync.Mutex互斥锁的原理及使用方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是天达云,小编将为大家推送更多相关知识点的文章,欢迎关注!