2026-08-04 周一 · 并发初通
2026-08-04
技术
C 语言
学习内容:C 语言 Day8 笔记——流程控制结构(下)
break 与 continue
| 语句 | 作用 |
|---|---|
break |
结束当前整个循环 |
continue |
跳过本次循环剩余部分,进入下一次迭代 |
error vs warning
| 类型 | 严重程度 | 编译结果 |
|---|---|---|
| error | 致命语法错误 | 编译失败,不生成可执行文件 |
| warning | 轻微问题 | 编译成功,但不要无视 |
真正的噩梦是运行时 Bug——编译通过,运行结果却不对。编译建议:
gcc -Wall严格检查。
goto 语句
- 无条件跳转到标签(Label)处执行
- 也能实现循环,但不要滥用——会严重降低代码可读性
- 不能跨函数跳转
Rust
学习内容:Rust Day9 笔记——并发深入练习
今天把线程相关的每个概念拆开单独练了一遍,感觉有些理解了。之前 Rustlings threads 是照着注释填空,知其然不知其所以然,今天分 7 步逐个跑通:
spawn+join— 最基本的线程启停,join 阻塞等待子线程结束move— 所有权移入线程,理解为什么必须这样Arc— 多线程共享只读数据,Arc::clone只加引用计数Arc<Mutex<T>>— 多线程读写同一份数据(10 线程各 +1)mpsc::channel— 线程间发消息,关键细节:必须drop(tx)否则 rx 永远等不到结束- 死锁 — 刻意写了一个死锁:两个线程按相反顺序拿两把锁,互相等待
AtomicUsize— 简单计数不用锁,硬件原子指令
并发选型速查
| 需求 | 方案 |
|---|---|
| 只读共享 | Arc<T> |
| 读写共享 | Arc<Mutex<T>> |
| 线程间传数据 | mpsc::channel |
| 简单计数 | AtomicUsize |
| 启动后台任务 | thread::spawn + join |
核心认知:Arc 解决共享、Mutex 解决互斥、channel 解决通信——三件事分清楚之后组合起来就不神秘了。
明日计划
- C 语言:循环结构作业 + 继续跟课堂
- Rust:并发练习加入错误处理(
lock()返回的Result不只用unwrap),有时间看看RwLock