go语言允许线程锁的嵌套,必须是不同的锁,同一个锁必须解锁后才可以加锁

package main

import (
   "fmt"
   "sync"
   "time"
)

var mu1 sync.Mutex
var mu2 sync.Mutex

func main() {
   Go1()
   for ; ; {
      time.Sleep(10 * time.Second)
   }
}

func Go1() {
   mu1.Lock()
   go Go2(123)
   go Go2(456)
   go Go2(789)
   mu1.Unlock()
}

func Go2(a int) {
   mu2.Lock()
   time.Sleep(3 * time.Second)
   fmt.Println(a)
   mu2.Unlock()
}

你可能感兴趣的:(go,物联网)