背景:在go并发编程系列二,你作为班主任,接手了有三个学生的班级,现状是这三个学生很调皮,看起来乱糟糟的,三个学生就是三个线程,怎么变的有序呢?答案是:给线程加锁!加锁需要使用go标准包的sync.Mutex,这是一个互斥锁。
给线程加锁的代码:
package concurrent import ( "fmt" "sync" "time" ) var mutex sync.Mutex // 创建一个互斥锁 func ThreadMutexZhangSan() { mutex.Lock() // 获取互斥锁 defer mutex.Unlock() // 在函数结束时释放互斥锁 for i :=1; i <= 3; i++ { fmt.Println("张三:", i) time.Sleep(time.Millisecond * 500) } } func ThreadMutexLiSi() { mutex.Lock() // 获取互斥锁 defer mutex.Unlock() // 在函数结束时释放互斥锁 for i := 1; i <= 3; i++ { fmt.Println("李四:", i) time.Sleep(time.Millisecond * 500) } } func ThreadMutexWangWu() { for i := 1; i <= 3; i++ { fmt.Println("王五*:", i) time.Sleep(time.Millisecond * 500) } }
当我们在main.go里再次执行go程时,发现这三个线程不再交替执行了,从无序变的有序起来了,这是你管理班级的第一个成效!