基本上就是实例代码这么个用法,值得注意的是如果锁没有事先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()
}