如何检查pthread是否进展?

时间:2015-01-14 15:03:34

标签: ios objective-c multithreading posix deadlock

我需要编写简单的看门狗,它可以检测iOS中的死锁。 我已经使用GCD调度源作为计时器实现了简单的计数器,该计时器递增计数器(在主线程上调度)。

这对于检测主线程是否卡住非常有用,但我希望通过能够检测任何线程上的死锁来改进它

我的想法是在所有线程中定期循环并比较检查之间的线程回溯,但我不确定这是好方法:

伪码:

const task_t    this_task = mach_task_self();
const thread_t  this_thread = mach_thread_self();

kern_return_t kr;
thread_act_array_t threads;
mach_msg_type_number_t thread_count;
kr = task_threads(this_task, &threads, &thread_count);

for (mach_msg_type_number_t i = 0; i < thread_count; i++) {

    // 0. get thread:
    thread_t thread = threads[i];
    // 1. do not analyze this thread (it is an watchdog thread):
    if (this_thread == thread)continue;
    // 2. suspend thread for a moment:
    if((kr = thread_suspend(thread)) != KERN_SUCCESS)continue;
    // 3. get backtrace:
    int backtraceLength = ksbt_backtraceThread(thread, (uintptr_t*)backtrace, sizeof(backtrace));
    // 4. todo - compare.... (HOW TO???)

任何人都可以提供帮助,如果比较回溯是检测线程是否卡住的好方法还是有更好的POSIX方法?

0 个答案:

没有答案