channel 死鎖的情況

2021-10-01 02:43:16 字數 938 閱讀 8926

主協程一定不能阻塞 ,要不然會報 dielock error區別

無緩衝通道本身不儲存資訊,它只負責轉手,有人傳給它,它就必須要傳給別人,如果只有進或者只有出的操作,都會造成阻塞。有緩衝的可以儲存指定容量個變數,但是超過這個容量再取值也會阻塞。

死鎖情況1 取完了通道儲存的資訊再去取資訊,也會死鎖

func main()

}

fatal error: all goroutines are asleep - deadlock!

原因分析 : chs 通道中資料讀取完,chs 此時相當於 無快取通道,對無緩衝通道 做 唯讀 或 只寫 操作 都會造成死鎖

死鎖情況2 無緩衝通道 唯讀 或 只寫

func main()
fatal error: all goroutines are asleep - deadlock!

原因分析 : 主線程阻塞在 無緩衝通道的寫入中,系統一直在等待釋放無緩衝通道,結果沒有釋放,系統判斷為死鎖

在子執行緒中執行只寫操作 則 主線程不會deadlock

死鎖情況3 子執行緒中阻塞 導致 主線程阻塞

func main()()

<- ch1

}

原因分析 : 子執行緒 阻塞在 ch2 <- 「string1」 主線程中執行到 <-ch1 結果 ch1中沒有數值 導致主線程阻塞

可以看下我的 channel 簡單的應用 **

Go語言裡channel的死鎖

最近看了下go語言並寫了些示例 在用到channel的時候報了個奇怪的錯誤然後退出 fatal error all goroutines are asleep deadlock 在stackoverflow上搜到 查了查,出錯的 如下 func chanfunc c chan int,d chan ...

關於Golang使用channel的死鎖問題

小白一枚,最近在入門學習golang,在學到channel時,發現總會遇到死鎖的問題 fatal error all goroutines are asleep deadlock 所以,當我們寫的程式生產和消費的數量不對等時,便會發生阻塞造成死鎖 生產者阻塞 生產4條訊息,只消費3條 package...

SQL檢查死鎖情況

create procedure sp who lock asbegin declare spid intdeclare blk intdeclare count intdeclare index intdeclare lock tinyint set lock 0 create table tem...