轉自:http://blog.chinaunix.net/uid-23766031-id-2386460.html
死鎖:一種情形,此時執行程序中兩個或多個線程發生永久堵塞(等待),每個線程都在等待被 其他線程占用并堵塞了的資源。例如,如果線程A鎖住了記錄1并等待記錄2,而線程B鎖住了記錄2并等待記錄1,這樣兩個線程就發生了死鎖現象。
gdb調試死鎖的方法:
gdb
attach pid
thread apply all bt
找到_lll_lock_wait 鎖等待的地方。
然后查找該鎖被哪個線程鎖住了。
例如:
查看哪個線程擁有互斥體(然后list代碼,查看使用互斥變量的名稱)
(gdb) print AccountA_mutex
$1 = {__m_reserved = 2, __m_count = 0, __m_owner = 0x2527,
__m_kind = 0, __m_lock
= {__status = 1, __spinlock = 0}}
(gdb) print 0x2527
$2 = 9511
(gdb) print AccountB_mutex
$3 = {__m_reserved = 2, __m_count = 0, __m_owner = 0x2529,
__m_kind = 0, __m_lock = {__status = 1, __spinlock = 0}}
(gdb) print 0x2529
$4 = 9513
(gdb)
從上面的命令中,我們可以看出AccontA_mutex是被線程 5(LWP 9511)加鎖(擁有)的,而AccontB_mutex是被線程 3(LWP 9513)加鎖(擁有)的。
posted on 2013-08-20 15:40
胡滿超 閱讀(1620)
評論(0) 編輯 收藏 引用 所屬分類:
C++