您好,登錄后才能下訂單哦!
本篇內容主要講解“如何實現Golang永久阻塞”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何實現Golang永久阻塞”吧!
Go 的運行時的當前設計,假定程序員自己負責檢測何時終止一個 goroutine 以及何時終止該程序。可以通過調用 os.Exit 或從 main() 函數的返回來以正常方式終止程序。而有時候我們需要的是使程序阻塞在這一行。
一直等待直到 WaitGroup 等于 0
package main import "sync" func main() { var wg sync.WaitGroup wg.Add(1) wg.Wait() }
select{}是一個沒有任何 case 的 select,它會一直阻塞
package main func main() { select{} }
雖然能阻塞,但會 100%占用一個 cpu。不建議使用
package main func main() { for {} }
一個已經鎖了的鎖,再鎖一次會一直阻塞,這個不建議使用
package main import "sync" func main() { var m sync.Mutex m.Lock() }
系統信號量,在 go 里面也是個 channel,在收到特定的消息之前一直阻塞
package main import ( "os" "syscall" "os/signal" ) func main() { sig := make(chan os.Signal, 2) signal.Notify(sig, syscall.SIGTERM, syscall.SIGINT) <-sig }
channel 會一直阻塞直到收到消息,nil channel 永遠阻塞。
package main func main() { c := make(chan struct{}) <-c }
package main func main() { var c chan struct{} //nil channel <-c }
到此,相信大家對“如何實現Golang永久阻塞”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。