我有加載到第三方程序的代碼,但沒有源代碼。該程序偶爾會掛起,在調試反彙編之後,我將其追蹤爲由於主線程中兩個互斥鎖的鎖定順序與託管我的插件的線程之間的競爭狀態。鎖定互斥鎖的調用都在OSX框架中。從輔助線程獲取主線程
我想看看暫停主線程,而我的插件線程繼續,將允許程序不會導致死鎖。
我可以得到task_info和task_threads一個呼叫線程的名單,但是這需要調用task_for_pid,如果程序以root身份運行,或procmod組的成員,它纔會起作用。這不是一個選項。
那麼,是否有可能獲得主線程(作爲thread_t)並暫掛它從輔助線程,而不需要主應用程序以root身份運行?
這聽起來像是做錯事情的錯誤方式。您是否完全確定死鎖是由操作系統的兩個鎖造成的,並且您在中間沒有自己的代碼的棧幀來控制鎖定順序? –
@AdamRosenfield,完全確定。兩個線程都需要兩個鎖,但是以相反的順序獲取它們。由於競賽條件,偶爾會導致鎖定。 – TheDarkKnight