go并发编程系列三:线程的顺序执行

发布时间 2023-09-02 15:37:41作者: jamstack

背景:在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程时,发现这三个线程不再交替执行了,从无序变的有序起来了,这是你管理班级的第一个成效!