go并发编程系列五:线程分组及控制线程的按序执行
背景:本文是对:go并发编程系列四:线程分组及控制线程的交替执行 的扩展,假定场景基本一致,唯一不同的是:本文中的张三、李四需要按序执行,通俗的讲就是:张三、李四对应的线程虽然同属于一组,但谁的线程先执行,就由谁优先完成班主任规定的一组任务。
拆分为技术片段的话,意味着:张三、李四对应的线程由普通线程变成了各自持有互斥锁的线程,哪个线程先获得锁,就由哪个线程先执行规定的一组任务。
代码如下:
package concurrent import ( "fmt" "sync" "time" ) // 在这个例子里,我们希望王五不要捣乱,等张三和李四竞争完成任务,王五再出现 // 即:张三和李四对应的线程先执行,王五对应的线程最后执行 var mutexImprove2 sync.Mutex // 创建一个互斥锁 func ThreadMutexImporve2ZhangSan(wg *sync.WaitGroup) { mutexImprove2.Lock() defer mutexImprove2.Unlock() defer wg.Done() for i :=1; i <= 3; i++ { fmt.Println("张三:", task[i]) time.Sleep(time.Millisecond * 500) } } func ThreadMutexImprove2LiSi(wg *sync.WaitGroup) { mutexImprove2.Lock() defer mutexImprove2.Unlock() defer wg.Done() for i := 1; i <= 3; i++ { fmt.Println("李四:", task[i]) time.Sleep(time.Millisecond * 500) } } func ThreadMutexImprove2WangWu() { for i := 1; i <= 3; i++ { fmt.Println("王五*:", task[i]) time.Sleep(time.Millisecond * 500) } }