我有一個問題:我可以在一個 goroutine 中tls.read tls 連接,而另一個 goroutine 正在調用tls.write嗎?代碼可能是這樣的:func main() { tlsConn := tls.Conn go func() { tlsConn.read(...) }() go func() { tlsConn.write(...) }()}
2 回答

江戶川亂折騰
TA貢獻1851條經驗 獲得超5個贊
tls 讀寫是相互獨立的。
Read 和 Write 尊重地使用單獨的互斥量輸入和輸出。
來自源代碼的片段
func (c *Conn) Write(b []byte) (int, error) {
if err := c.Handshake(); err != nil {
return 0, err
}
c.out.Lock()
defer c.out.Unlock()
.
.
}
func (c *Conn) Read(b []byte) (int, error) {
if err := c.Handshake(); err != nil {
return 0, err
}
if len(b) == 0 {
// Put this after Handshake, in case people were calling
// Read(nil) for the side effect of the Handshake.
return
}
c.in.Lock()
defer c.in.Unlock()
.
.
}
因此
您可以同時寫入和讀取。
您可以同時進行多次讀取,但一次只能進行一次讀取。
您可以同時進行多次寫入,但一次只能進行一次寫入。
- 2 回答
- 0 關注
- 184 瀏覽
添加回答
舉報
0/150
提交
取消