发生了死锁,发现pthread_mutex_lock正在等待获取锁定,但互斥锁已锁定且所有者设置为零。
p *(*spinLock)->lock
$47 = {__data = {__lock = 1, __count = 0, __owner = 0, __kind = 0, __nusers = 0, {__spins = 0, __list = {__next = 0x0}}}, __size = "\001", '\000' <repeats 22 times>, __align = 1}
我在这里想知道,只有lock和__align设置为1但重置包括所有者和计数设置为零。最初我想到了腐败,但是当我检查分配的大小时,它是正确的。
(gdb) p (*spinLock)->lock
$49 = (pthread_mutex_t *) 0x2df7a764
(gdb) x/2x 0x2df7a764-4
0x2df7a760: 0x0000001c 0x00000001
(gdb) p/x sizeof(*(*spinLock)->lock)+4
$51 = 0x1c
我试图找出可能导致这种情况的原因,但我不能。任何指针都会真的。谢谢!