3.1《庖丁解牛:信号量(Semaphore)与互斥量(Mutex)深度剖析》

张开发
2026/6/10 22:32:29 15 分钟阅读
3.1《庖丁解牛:信号量(Semaphore)与互斥量(Mutex)深度剖析》
庖丁解牛:信号量(Semaphore)与互斥量(Mutex)深度剖析001、并发编程基石:为何需要信号量与互斥量?深夜两点,调试器停在了第187行。一个看似简单的计数器,在双核芯片上跑了不到十分钟,数值就开始“跳变”——有时加一,有时加二,偶尔还会倒退。逻辑检查了三遍,没发现算法错误。直到把断点打在汇编层面,才看到两个核的指令交织在一起:LDREX和STREX之间插进了另一个核的写操作。那一刻我突然意识到,并发问题不是“理论场景”,而是真实存在的幽灵。并发世界的根本矛盾单核时代,我们靠中断屏蔽和任务切换就能控制执行流。多核普及后,真正的并行来了:两个线程可能同时读写同一块内存,两个任务可能竞争同一个硬件外设。这时候,代码的“正确性”不再只取决于逻辑,还取决于执行时序——而时序是不可预测的。那个计数器的例子,暴露的就是典型的数据竞争:// 伪代码示意intcounter=0;

更多文章