当前位置: 首页 > news >正文

两个线程对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.jsqmd.com/news/536443/

相关文章:

  • OpenClaw自动化质检:nanobot识别截图中的UI异常
  • 2026长沙名表鉴定优质机构推荐指南:长沙包包鉴定、长沙名包回收、长沙名包抵押、长沙名烟回收、长沙名表回收、长沙名酒回收选择指南 - 优质品牌商家
  • OpenClaw技能开发入门:为Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF定制自动化模块
  • Git可视化工具在嵌入式开发中的高效应用
  • ide-eval-resetter:解决JetBrains IDE试用期限制的轻量级方案
  • Depth Anything 3实战指南:从单图深度估计到实时视频流处理的完整方案
  • 3D打印材料参数调试指南:从问题诊断到精准配置
  • OpenClaw硬件选购指南:Qwen3-32B-Chat最佳配置方案
  • Costar提示词:从原理到实践的技术解析与避坑指南
  • BepInEx终极指南:Unity游戏模组框架三步安装与实战应用
  • GLM-OCR:0.9B参数实现超高效多语言文档识别
  • STM32看门狗机制:IWDG与WWDG对比与应用
  • 5步精通node-llama-cpp:本地AI推理实战指南
  • 基于springboot莆院在线考试系统设计与开发(源码+精品论文+答辩PPT等资料)
  • OpenClaw成本优化指南:GLM-4.7-Flash自部署降低Token消耗90%
  • 通义万象Wan2.2-TI2V-5B:零门槛实现电影级AI视频生成的实战指南
  • 智能制造场景润滑方案及通用润滑脂选购指南 - 优质品牌商家
  • springboot + vue 大件物流快递系统vue3
  • AI 辅助开发实战:2026计算机毕设题目中的智能选题与原型生成方案
  • 解决MicroG GmsCore Google账户登录问题:从现象到本质的深度解析
  • 利用弱监督学习实现高效图像分割
  • 嵌入式C语言实用程序开发技巧
  • 深入图解 ConcurrentHashMap 底层实现:从 JDK1.7 到 1.8 的史诗级蜕变
  • 从爬取到预测:基于Python的招聘数据全链路分析与可视化实战(含薪资预测模型)
  • ST25DV64KC动态NFC标签Arduino驱动库详解
  • OpenClaw报错排查大全:GLM-4.7-Flash接口连接失败解决方案
  • 西城区三字堂硬笔书法
  • 4大突破:面向全场景的聊天应用UI设计方案
  • 解决 cl.exe 构建和调试活动文件仅在 VS Code 从 Developer Command Prompt 中运行时才可用的效率优化方案
  • OpenClaw性能白皮书:Qwen3.5-9B在不同任务类型的基准测试