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

防火墙(多机器协作)

相关推荐
刘天远1 小时前
Agent最小权限实现:策略表、临时令牌与撤权回归
java·jvm·人工智能·sqlite
用户0942485680316 小时前
第9章:OpenJDK堆分代与 Serial/Parallel GC 基础
java·jvm
小陈不好吃19 小时前
深入理解 JVM 内存模型:从堆栈结构到 GC 日志分析实战
java·jvm·java-ee·jdk
liangbo71 天前
12-JVM 调优方法论与参数速查
java·jvm
用户094248568031 天前
第8章:Java 内存模型(JMM)入门——可见性、有序性、原子性
java·jvm
西峰u1 天前
Java多线程从入门到线程安全
java·开发语言·jvm
wuminyu1 天前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
万年咸鱼2 天前
JVM 内存区域详解
jvm
Escalating_xu2 天前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm
HEJOO92 天前
JVM 参数调优实战指南
jvm