如果把線程安全地定義為允許多個goroutine同時去讀寫,那麼golang 的channel 是線程安全的。不需要在並發讀寫同一個channe時加鎖。
channel用於goroutine之間的通訊如果不用channel,使用共享全域變數的方式,需要加鎖
// synchornized 同步
// golang中的 sync包中有互斥锁
var lock sync.Mutex // mutex 互斥
lock.Lock() // 上锁
// 多个goroutine同时对相同的数据进行修改
lock.Unlock() // 解锁
使用同步鎖定效率會很低
channel主要用於goroutine通訊和解決主執行緒等待goroutine執行結束再退出的問題
basic concept of channel本質上是一個FIFO的資料結構-佇列
線程安全,不需要加鎖
channel是有類型的,如字串channel chan string,只能保存string資料
以上是golang 管道線程安全嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!