首先几个 东西 : 环形缓冲区 Arr , 配套的指针 recv , sendx
以下所有操作 均有 lock , unlock
write v :
1. 读等待队列(r_wq)有元素,{
弹出 r_wq 头元素S, 将 v写入S
}
2. 可写入 缓冲区 {
Arr[ sendx++] = v
}
3. 不可写入缓冲区 {
struct hang { } ; 加入写等待队列 ;
}
read v:
1. 写等待队列(w_wq)有元素 {
弹出读w_wq 头元素S1
读Arr[recv]元素S2, 将 S2写入v
S1 写入Arr[recv]
}
2. 缓冲区非空 {
读Arr[recv]元素S2, 将 S2写入v
}
3. 缓冲区空 {
同上,加入读等待队列
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2022-12-14 求质因数