成都网站建设设计

将想法与焦点和您一起共享

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

这篇文章主要讲解了“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互斥锁的原理及使用方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


网站标题:sync.Mutex互斥锁的原理及使用方法
当前URL:http://chengdu.cdxwcx.cn/article/gosjhp.html