亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

Go
慕森王 2021-11-01 15:11:35
我有一個問題:我可以在一個 goroutine 中tls.read tls 連接,而另一個 goroutine 正在調用tls.write嗎?代碼可能是這樣的:func main() {        tlsConn := tls.Conn        go func() {                tlsConn.read(...)        }()        go func() {                tlsConn.write(...)        }()}
查看完整描述

2 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

輸入和輸出是分開的,所以它們不應該相互干擾。對Write或 的并發調用Read由互斥鎖保護。

因此,是的,以并發方式調用它們是安全的。


查看完整回答
反對 回復 2021-11-01
?
江戶川亂折騰

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()

    .

    .

}

因此

  1. 您可以同時寫入和讀取。

  2. 您可以同時進行多次讀取,但一次只能進行一次讀取。

  3. 您可以同時進行多次寫入,但一次只能進行一次寫入。


查看完整回答
反對 回復 2021-11-01
  • 2 回答
  • 0 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號