go语言os.exit(1)_在Golang中各种永远阻塞的姿势

本文介绍了在Golang中实现程序永远阻塞的几种方式,包括使用sync.WaitGroup、空select、死循环、sync.Mutex以及通过os.Signal和channel。同时提醒,这些阻塞操作可能导致死锁,需配合业务逻辑的goroutine使用。
摘要由CSDN通过智能技术生成

在Golang中各种永远阻塞的姿势

Go的运行时的当前设计,假定程序员自己负责检测何时终止一个goroutine以及何时终止该程序。

可以通过调用os.Exit或从main()函数的返回来以正常方式终止程序。而有时候我们需要的是使程序阻塞在这一行。

使用sync.WaitGroup

一直等待直到WaitGroup等于0

package main

import "sync"

func main() {

var wg sync.WaitGroup

wg.Add(1)

wg.Wait()

}

空select

select{}是一个没有任何case的select,它会一直阻塞

package main

func main() {

select{}

}

死循环

虽然能阻塞,但会100%占用一个cpu。不建议使用

package main

func main() {

for {}

}

用sync.Mutex

一个已经锁了的锁,再锁一次会一直阻塞,这个不建议使用

package main

import "sync"

func main() {

var m sync.Mutex

m.Lock()

m.Lock()

}

os.Signal

系统信号量,在go里面也是个channel,在收到特定的消息之前一直阻塞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值