我有一个问题:我可以在一个 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 关注
- 153 浏览
添加回答
举报
0/150
提交
取消