}staticvoidfutex_wait_queue_me(structfutex_hash_bucket *hb,structfutex_q *q,structhrtimer_sleeper *timeout){// ... ... 省略set_current_state(TASK_INTERRUPTIBLE);//挂起queue_me(q, hb);// ... ... 省略}staticintfutex_wait_setup(u32 __user *uaddr, u32 val,unsignedintflags,structfu...
我们看到出现这种夯死现象的程序,大多线程都会停在 内核的 futex_wait_queue_me 这个函数处;而这个函数,使用 TASK_INTERRUPTIBLE 来设置自己的状态,表示自己主动想放弃CPU,但可以被中断、信号或其他程序唤醒;并在下面调用 schedule 内核调度方法,主动通知内核放弃自己的CPU。 所以,我们从外界最简单的就是通过向其发送...
我们看到出现这种夯死现象的程序,大多线程都会停在 内核的 futex_wait_queue_me 这个函数处;而这个函数,使用 TASK_INTERRUPTIBLE 来设置自己的状态,表示自己主动想放弃CPU,但可以被中断、信号或其他程序唤醒;并在下面调用 schedule 内核调度方法,主动通知内核放弃自己的CPU。 所以,我们从外界最简单的就是通过向其发送...
1754 * futex_wait_queue_me() - queue_me() and wait for wakeup, timeout, or signal 1755 * @hb: the futex hash bucket, must be locked by the caller 1756 * @q: the futex_q to queue up on 1757 * @timeout: the prepared hrtimer_sleeper, or null for no timeout 1758 */ 1759stat...
发现大多数线程在停在 futex_wait_queue_me 这个内核函数中。 这个函数使当前线程主动释放CPU进入等待状态,若没有被唤醒,就一直停在这个函数中。 也就是说,现在大多数线程都在等其他资源释放锁,下面我们就需要到用户态下分析,他们到底在等待什么锁。
发现大多数线程在停在 futex_wait_queue_me 这个内核函数中。 这个函数使当前线程主动释放CPU进入等待状态,若没有被唤醒,就一直停在这个函数中。 也就是说,现在大多数线程都在等其他资源释放锁,下面我们就需要到用户态下分析,他们到底在等待什么锁。