Go语言 之互斥锁

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语句保证互斥锁及时解锁。

posted @ 2019-07-04 16:33  样子2018  阅读(1615)  评论(0编辑  收藏  举报