我正在使用linux内核(SLES11-SP2)提供的cmpxchg()
它惊慌失措。
它坠毁的确切地点在2005年:
if (cmpxchg(var, old, new) == old)
2002: 48 89 d8 mov %rbx,%rax
2005: f0 4d 0f b1 34 24 lock cmpxchg %r14,(%r12)
200b: 48 39 c3 cmp %rax,%rbx
200e: 74 27 je 2037 <atomicPatchFnPtr+0x77>
有什么线索吗,我怎样才能进行调试?发生这种情况是因为锁定变量时的竞争条件吗?
或者我需要把它作为一个bug发布到内核上吗?
最佳答案
如果传递给lock cmpxchg指令的地址(此处为%r12)无效,则该指令可能导致访问冲突。这可能是上面代码行中的变量var。这表明var指向了一些无效的内存。它不是cmpxchg函数中的race,但它可能仍然是调用函数中的race条件。
关于linux - linux提供的cmpxchg调用会崩溃吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16235688/