C++进阶知识5.0

目录

伪唤醒与竞态条件

☆☆☆TLS技术(内存池一级缓冲区的使用)

常用的输入接口

防火墙(多机器协作)


伪唤醒与竞态条件

我: 请解释一下你实现的线程池中,HandlerTask 函数内部为什么使用 while 循环来检查任务队列是否为空,而不是 if 语句?这背后涉及什么经典问题?

伪唤醒(spurious wakeup)是指线程在条件变量上等待时,即使++没有其他线程调用signal或broadcast++ ,也可能被操作系统或线程库意外唤醒。这通常是底层实现中的内部延迟、信号处理干扰与或硬件条件导致的,POSIX标准明确规定允许这种行为。为了应对伪唤醒spurious wakeup,必须使用while而不是if单次判断。

竞态条件(race condition)

竞态条件(race condition)是指多个线程同时访问共享数据,且至少有一个线程在写,由于没有适当的同步机制,执行结果依赖于线程调度的具体时序,导致不可预测的错误。

☆☆☆TLS技术(内存池一级缓冲区的使用)

cpp 复制代码
static _declspec(thread) ThreadCache* pTLSThreadCache = nullptr;

线程局部存储(TLS)的概念

普通全局变量 vs TLS 变量

cpp

复制代码
// 普通全局变量 - 所有线程共享
int global_counter = 0;  
// 线程A修改 → 线程B也能看到变化

// TLS 变量 - 每个线程独立
static _declspec(thread) int tls_counter = 0;
// 线程A修改 → 线程B不受影响,各自独立

string与char*转换接口

string std::to_string(int val); 将纯正数字字符转string类型。

string::c_str(); 将string转const char*

常用的输入接口

1.std::getline()它可以指定字符停止,getline是以行为单位进行读取的。

防火墙(多机器协作)

相关推荐
一木 之林2 小时前
五、C++新特性、关键字与编译原理
java·jvm·算法
Mr. zhihao3 小时前
线上卡顿排查决策手册:场景 × 命令 × 现象 × 调整方案
java·开发语言·jvm
Nontee7 小时前
Excel 导出组件改造实录:从 Full GC 到声明式导出
jvm·excel
牛油果子哥q7 小时前
C++异常处理万字详解:try-throw-catch机制、栈展开、标准异常体系、自定义异常、工程规范、内存泄漏避坑
开发语言·jvm·c++
leisoo809719 小时前
ig50数据落盘ClickHousevsTimescaleDBvsDuckDB实测对比 IG50免费开源股票数据API接口
开发语言·jvm·数据库·python·json
今天的砖头有点烫手啊1 天前
JVM 调优实战:从 GC 日志到参数优化,一次完整排查
java·jvm
JAVA面经实录9171 天前
MySQL问题定位与性能优化完整知识体系
java·jvm·数据库·mysql·性能优化
LCG元1 天前
【实战】树莓派物联网开发:DHT11温湿度采集与MQTT云上报全流程
java·jvm·物联网