两个线程对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

这些共享变量必须加锁!否则会崩溃!

相关推荐
guo_wen_qiang几秒前
springboot如何自定义一个启动器starter
java·spring boot·intellij-idea
许彰午4 分钟前
55-字典缓存与通知SPI
java·低代码·架构
曼巴UE56 分钟前
UE5 客户端 需要的网络同步概念总结(3 )-事件同步 RPC 以及三种调用方式
网络·c++·网络协议·学习·rpc·ue5
captain3769 分钟前
HTTP(2)
java·网络·http·java-ee
徐子童11 分钟前
介绍MVCC机制
java·mysql·面试题·秋招·并发·mvcc
万联WANFLOW11 分钟前
94%成交引爆美区:TikTok直播电商迎来高客单价时代
网络·业界资讯
Wang's Blog12 分钟前
Java 项目实战: 外卖平台-启用禁用员工账号与Long精度丢失修复
java·服务器
xiaoye-duck13 分钟前
《Linux 网络编程》深入理解数据链路层:从MAC帧到ARP协议的底层原理详解
linux·网络
开开心心就好16 分钟前
安卓手写文字生成工具,多种纸张一直免费
网络·网络协议·tcp/ip·leetcode·智能手机·电脑·模拟退火算法
乌暮17 分钟前
Java 抽象类与接口详解:半成品图纸 vs 能力合同
java·开发语言·后端·学习