直接點說,就是由於fmt 是執行緒不安全的, 如果你在多協程場景下使用fmt列印資訊可能會得到亂序的結果就是說 不按**裡的順序列印.
下面看示例
**示例
golang fmt 多執行緒 亂序:
func main()
wg.add(10)
var arr int
for i:=0;i<10;i++ (i)
} wg.wait() // 隔離
s :=0
for _, v := range arr
log.println(s)
}
輸出結果是這樣的:
2019/09/16 20:54:22 i: 2
22019/09/16 20:54:22 i: 4
42019/09/16 20:54:22 i: 0
82019/09/16 20:54:22 i: 8
72019/09/16 20:54:22 i: 6
2019/09/16 20:54:22 40
雖然有wait 隔離了協程的執行,但 fmt 還是導致了亂序. 和普通的多執行緒問題還不太一樣.
這個我和同事研究了一下,有可能是因為log 有個輸出的buffer,wait之前的邏輯 只能確保資訊輸出到buffer,之後log 和fmt 競爭std.out. 所以交叉輸出.
最後最後,列印資訊的話 一般也不用fmt,fmt一般用來格式化. 所以沒啥奇葩需求也就不要用fmt了.
你所不知道的 const
const 常量是不可修改的,也就是說only read,例如 const int nbuffsize 512 nbuffsize 0 error就是因為const 常量不能修改,所以定義時必須初始化預設在全域性作用域中定義的非const變數可以在整個程式中訪問,例如 int ncounter ex...
你所不知道的background
今天要說說css中background這個屬性裡面的大學問。在乙個宣告中設定所有的背景屬性 body 看到這串 你怕了嗎?知道他們都代表啥意思嘛?不要捉急,來看展開式。展開式 background color設定元素的背景顏色,不能設定到外邊距,可以繼承父級的背景顏色,預設為透明。backgroun...
overflow hidden 你所不知道的事
overflow hidden 你所不知道的事 overflow hidden這個css樣式是大家常用到的css樣式,但是大多數人對這個樣式的理解僅僅侷限於隱藏溢位,而對於清除浮動這個含義不是很了解。這是乙個常用的div寫法,下面我們來書寫樣式。大家可以在dmx中自己做試驗 wai nei 可以看到...