这篇文章主要讲解了“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互斥锁的原理及使用方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/qiongtaoli/blog/3117139