mutex.Lock():是否需要加锁,何时加?

发布时间 2023-04-23 11:47:39作者: 西伯尔

流加锁,包不用加锁

传输层的TCP是基于流的传输,需要加锁,
应用层的WebSocket是基于包的传输,同时写也不会导致数据混乱,不需要加锁。

所以,在*websocket.Conn.WriteJSON(data)时,不需要前后加锁

以下代码中的mutex.Lock()没必要:
wsc.mutex.Lock() //由于websocket不支持并发写入,所以需要在写消息的地方都需加上互斥锁,不要则会报错:concurrent write to websocket connection go  这个说法不对,ws支持并发??【有空自己测一下】

wsc.conn.WriteJSON(sdata) //WriteJSON和WriteMessage区别?WriteJSON相当于在原基础上序列化了,人眼可见的形式。
// wsc.conn.WriteMessage(1, sdata) //

wsc.mutex.Unlock() //对c对象上的mutex进行解锁。

</details>