现象: gdb bt 卡在 spinlock_unlock() 位置。
-
查了半天代码,我的每一个锁都没有问题。给我看吐血了。
-
最后没辙了灵机一动 gdb disassemble 发现这里死循环了:

原来是一个标志位没有设置为 volatile ,代码被优化了。大概的代码如下:
while (true) {
// 多线程中可以被修改的一个标志
if (flags_1 == STATUS_1) {
continue
}
// 其他逻辑
// ... ...
}
但是为什么不是必现的 BUG 呢? AI 给了一堆解释,但是没怎么看懂。
|