两个线程对socket 进行读和写,需要加锁吗
同一个 socket一个线程只读、一个线程只写 → 不需要加锁同一个 socket两个线程都可能读 / 都可能写 → 必须加锁我给你用最简单、最直白、Linux 官方规则讲清楚1. 官方 POSIX / Linux 规定黄金定律TCP socket 是全双工的读recv和写send用的是两个独立缓冲区内核保证单读 单写 线程安全所以✅线程 A只负责 recv 读数据✅线程 B只负责 send 写数据完全不需要加锁2. 什么时候必须加锁非常重要只要出现下面任意一种必须加互斥锁①两个线程都在 send写→ 不加锁会导致数据错乱、拼接混乱②两个线程都在 recv读→ 不加锁会导致数据被瓜分、丢包、解析失败③ 读写线程同时close socket / 重连 / 判断连接状态cpp运行m_nConnect ! 0 m_ClientSocket 0→这些共享变量必须加锁否则会崩溃
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2449536.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!