package main
import (
"fmt"
"sync"
"time"
)
var Mutex sync.Mutex
func Printer(s string) {
//锁定
Mutex.Lock()
for _, data := range s {
fmt.Printf("%c ", data)
}
fmt.Println("")
//解锁
defer Mutex.Unlock()
}
func main() {
//创建协程
go Printer("hello")
go Printer("world")
time.Sleep(time.Second * 2)
}
互斥锁是传统并发编程对共享资源进行访问控制的主要手段,它由标准库sync中的Mutex结构体类型表示。sync.Mutex类型只有两个公开的指针方法,Lock和Unlock。Lock锁定当前的共享资源,Unlock进行解锁。
在使用互斥锁时,一定要注意:对资源操作完成后,一定要解锁,否则会出现流程执行异常,死锁等问题。通常借助defer。锁定后,立即使用defer语句保证互斥锁及时解锁。