我的程序中有多個(gè)goroutine,每個(gè)goroutine都進(jìn)行調(diào)用而fmt.Println沒有任何顯式同步。這樣安全嗎(即,每行將單獨(dú)出現(xiàn)而不會(huì)破壞數(shù)據(jù)),還是我需要?jiǎng)?chuàng)建另一個(gè)帶有同步的goroutine來專門處理打?。?
3 回答

婷婷同學(xué)_
TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
不,即使您有時(shí)可能沒有發(fā)現(xiàn)任何麻煩,也不安全。IIRC,fmt軟件包試圖處于安全狀態(tài),因此可能會(huì)發(fā)生某種混合,但希望不會(huì)導(dǎo)致進(jìn)程崩潰。
這是更通用的Go文檔規(guī)則的一個(gè)實(shí)例:除非另有指定或從上下文中可以明顯看出,否則對于并發(fā)訪問而言,事物并不安全。
可以使用帶有少量初始設(shè)置的日志包來獲得fmt.Print *功能的子集的安全版本。

白衣染霜花
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
一切fmt
都回落到這里w.Write()
可以看出。因?yàn)橹車鷽]有鎖,所以一切都?xì)w結(jié)到的實(shí)現(xiàn)。由于仍然沒有鎖定(至少對于Stdout),因此不能保證您的輸出不會(huì)混合。Write()
我建議使用全局日志例程。
此外,如果您只想記錄數(shù)據(jù),請使用該log
程序包,該程序包會(huì)正確鎖定對輸出的訪問。請參閱實(shí)現(xiàn)以供參考。
- 3 回答
- 0 關(guān)注
- 235 瀏覽
添加回答
舉報(bào)
0/150
提交
取消