<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 簡介 我們經常需要讓主 goroutine 處于永久阻塞狀態,這樣其他的 gorotine 就可以一直運行處理信息。下面我總結了幾種可以實現永久阻塞的方法,其中大部分實例代碼無法直接運行,因為 Go runtime 會檢查所有 goroutine 并提示所有的 goroutine 都處于 deadlock,在實際使用中,我們添加具體的業務 goroutien 就可以運行了。 # 死循環 說到永久阻塞第一個想到的應該就是死循環。 ~~~ package main func main() { for {} } ~~~ 死循環雖然可以實現永久阻塞,但是對于 Go 而言,for 死循環所在的 goroutine 還是一直處于“運行”狀態,所以死循環會消耗一定的 CPU,不推薦使用。 # `sync.Mutex` 使用鎖,我們可以對已經鎖了的鎖,再次申請鎖。 ~~~ package main import ( "sync" ) func main() { var lock sync.Mutex lock.Lock() lock.Lock() } ~~~ 該實例代碼會提示死鎖。不推薦使用。 # sync.WaitGroup 一個不會減少的 WaitGroup 就實現了永久阻塞 ~~~ package main import "sync" func main() { var wg sync.WaitGroup wg.Add(1) wg.Wait() } ~~~ 該實例代碼會提示死鎖。 # select 空 select 會一直阻塞 ~~~ package main func main() { select{} } ~~~ 該實例代碼會提示死鎖。 # channel 使用 channel 本身會一直阻塞直到接收到信息。 ~~~ package main func main() { c := make(chan struct{}) <-c } ~~~ nil channel 會永久阻塞 ~~~ package main func main() { var c chan struct{} <-c } ~~~ # os.Signal 使用信號量配合 channel 實現永久阻塞 ~~~ package main import ( "os" "os/signal" "syscall" ) func main() { sig := make(chan os.Signal, 1) signal.Notify(sig, syscall.SIGUSR2) <-sig } ~~~ 這樣只有當我們傳遞 SIGUSR2 信號(`kill -USR2 [pid]`)的時候阻塞才會停止。sig 要設置為可緩沖的 channel,或者可能如果 goroutine 沒有準備好信號會被丟棄。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看