基本上就是实例代码这么个用法,值得注意的是如果锁没有事先Lock,直接Unlock会触发一个panic异常,个人觉得这个锁跟自己之前利用信道写的锁差不多,只不过一个是用了go本身的机制一个是利用了linux内核提供的互斥锁mutex,其实原理基本差不多,不同的是,mutex可能更加的完善,有一个list_head wait_list的等待队列,而自己利用channel写的是所有goroutine都block住了,然后随时争抢资源。
package main
import(
        "sync"
        "fmt"
        "time"
)

var l sync.Mutex



func main() {
        l.Lock()
        go f()
        time.Sleep(3000 * time.Millisecond)
        l.Unlock()
        fmt.Println("finish")
        for{
                time.Sleep(3000 * time.Millisecond)
        }

}

func f() {
        l.Lock()
        fmt.Println("i am going")
        time.Sleep(3000 * time.Millisecond)
        fmt.Println("hello world")
        l.Unlock()
}