2
我在我的一個c應用程序(它是一個大代碼)中面臨死鎖,並且我能夠調試打印互斥鎖的階段。它看起來像下面 -使用pthread互斥鎖(linux)調試死鎖
{__data =
{__lock = 2,
__count = 0,
__owner = 15805,
__nusers = 1,
__kind = 0,
__spins = 0,
__list = {__prev = 0x0, __next = 0x0}
},
__size = "\002\000\000\000\000\000\000\000½=\000\000\001", '\0' <repeats 26 times>,
__align = 2
}
現在我能明白,__owner是線程持有這個互斥體的線程ID,同一線程對這個互斥結束死鎖。有沒有人知道其他領域的意義,如_ 鎖, _count,__自旋等可能有用的調試死鎖?任何提示/技巧也會受到歡迎? (基於調試,我明白的線程試圖鎖定它已經擁有的互斥鎖,結束在死鎖,也是其他線程都爲這個互斥鎖)
也可以找出哪一行代碼有這通過調試器(gdb)觀察進程/線程鎖定(當然,調試信息和代碼在手),而不需要仔細的代碼遍歷代碼?我已經通過了我的代碼幾次,但無法找到這個鎖在從函數返回之前未釋放的位置。
由於 書呆子