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是以行为单位进行读取的。

防火墙(多机器协作)

相关推荐
今天的砖头有点烫手啊9 小时前
Java 对象内存布局:压缩指针、对齐填充与 JOL 实测
java·jvm
凯凯姜10 小时前
JVM 内存持续增长与 Full GC 频繁
jvm
驭渊的小故事11 小时前
从 JVM 底层看泛型:泛型擦除、Signature 属性与 Super Type Token 模式
java·开发语言·jvm
香蕉大香蕉(06敬畏市场)1 天前
高频八股 · Java 并发编程(10):异步、ThreadLocal 与虚拟线程(收官)
java·开发语言·网络·jvm·python·ai·实习
wuminyu1 天前
JVM规范学习总结-Class文件结构
java·linux·c语言·jvm·c++
酌沧2 天前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
wuminyu3 天前
JVM规范学习总结-Java源码经过javac编译后产物
java·linux·c语言·jvm·c++
学到老活到老3 天前
类已经加载了,为什么静态代码还没执行?
java·jvm
学到老活到老3 天前
写了 new,就一定会在堆上分配对象吗?
java·jvm
笨笨饿3 天前
# 59_CSDN博客自动写流程文章
linux·jvm·stm32·单片机·嵌入式硬件·mcu·51单片机