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

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

相关推荐
小碗羊肉5 小时前
【从零开始学Java | 第三十八篇】序列化流(Object Stream)
java·开发语言
亚历克斯神5 小时前
Java 23 虚拟线程进阶:深度探索与实战
java·spring·微服务
想带你从多云到转晴5 小时前
02、JAVAEE--多线程(二)
java·开发语言·javaee
AIoT科技物语5 小时前
免费开源!50+算法,Java基于YOLO框架的视频AI识别算法平台,适配低空无人机巡检、摄像头安防场景
java·人工智能·算法·yolo·开源
编程百晓生5 小时前
《SAP FICO系统配置从入门到精通共40篇》021、CO-PC实战笔记:在制品与差异计算,那些年车间里的“账实不符”
服务器·人工智能·笔记·ar·从入门到精通·sap fico·sap fico系统
黑客大白5 小时前
IDEA安装教程配置java环境(超详细)_idea配置java,零基础入门到精通,收藏这篇就够了
java·ide·intellij-idea
一只大袋鼠5 小时前
Java JDBC 封装:从原生写法到工具类封装 + 增删改查
java·开发语言·数据库·mysql
ch.ju5 小时前
Java程序设计(第3版)第二章——三元运算符
java
txxzjmzlh5 小时前
Java 线程的几种状态
java·开发语言
坚持就完事了5 小时前
scp命令
linux·运维·服务器