猿问

golang 中的 tls.Conn “goroutine 安全”吗?

我有一个问题:我可以在一个 goroutine 中tls.read tls 连接,而另一个 goroutine 正在调用tls.write吗?代码可能是这样的:


func main() {

        tlsConn := tls.Conn

        go func() {

                tlsConn.read(...)

        }()

        go func() {

                tlsConn.write(...)

        }()

}


慕森王
浏览 154回答 2
2回答

大话西游666

输入和输出是分开的,所以它们不应该相互干扰。对Write或 的并发调用Read由互斥锁保护。因此,是的,以并发方式调用它们是安全的。

江户川乱折腾

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()    .    .}因此您可以同时写入和读取。您可以同时进行多次读取,但一次只能进行一次读取。您可以同时进行多次写入,但一次只能进行一次写入。
随时随地看视频慕课网APP

相关分类

Go
我要回答