新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要讲解了“sync.Mutex互斥锁的原理及使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“sync.Mutex互斥锁的原理及使用方法”吧!
成都创新互联是一家专业提供巨野企业网站建设,专注与做网站、网站制作、H5响应式网站、小程序制作等业务。10年已为巨野众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。
说明:
互斥锁用来保证在任一时刻,只能有一个例程访问某对象。 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互斥锁的原理及使用方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!