📅  最后修改于: 2023-12-03 14:53:07.871000             🧑  作者: Mango
在Go语言中,有一些方法可以暂停当前 Goroutine 的执行。
使用 time.Sleep()
函数可以让当前 Goroutine 睡眠一段时间后再继续执行。这个函数的参数是一个时间段(Duration),可以是纳秒、微秒、毫秒、秒等等。例如,下面的代码将会暂停执行 1 秒钟:
import "time"
func main() {
fmt.Println("开始执行")
time.Sleep(1 * time.Second)
fmt.Println("暂停 1 秒钟后继续执行")
}
使用 chan 管道可以实现 Goroutine 之间的通信,可以通过一个 chan 管道来控制另一个 Goroutine 的执行。例如,下面的代码将会创建一个双向的、缓冲大小为 1 的 chan 管道,然后将其传给一个新的 Goroutine,使其暂停执行:
import "fmt"
func main() {
fmt.Println("开始执行")
ch := make(chan bool, 1)
go func() {
<-ch // 等待 chan 管道被发送数据
fmt.Println("收到信号,暂停执行")
}()
ch <- true // 发送数据到 chan 管道
fmt.Println("数据已发送")
}
使用 sync 包可以实现 Goroutine 之间的同步,可以通过一个 mutex 或 cond 条件变量来控制 Goroutine 的执行。例如,下面的代码将会创建一个互斥锁 mutex,然后对其进行加锁和释放操作,使其暂停执行:
import "fmt"
import "sync"
func main() {
fmt.Println("开始执行")
var mutex sync.Mutex
mutex.Lock() // 加锁
go func() {
mutex.Lock() // 等待锁被释放
fmt.Println("锁已释放,暂停执行")
}()
mutex.Unlock() // 释放锁
fmt.Println("锁已释放")
}
这些方法各有优缺点,具体使用应根据实际需求来选择。