Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 02 Aug 2012 10:25:04 +0800
From:      David Xu <listlog2011@gmail.com>
To:        Daniel Rudy <dr2867@pacbell.net>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Enumerating sleeping threads
Message-ID:  <5019E500.8060105@gmail.com>
In-Reply-To: <5019E209.50109@pacbell.net>
References:  <5019E209.50109@pacbell.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2012/8/2 10:12, Daniel Rudy wrote:
> Hello,
>
> What is the best way to enumerate the sleeping threads via
> sleepqueue(9)?  Furthermore, when enumerating the threads that are on
> the run queue, what locks are needed, if any?
sleepqueue hash bucket is private data structure in subr_sleepqueue.c, I 
think you
can not access it outside of the file.
One way to enumerate the sleeping threads is iterating all threads in 
the system,
and check their states.  proc.h contains two macros:
FOREACH_PROC_IN_SYSTEM
FOREACH_THREAD_IN_PROC

To access thread state, you should use thread lock,  call thread_lock()
and thread_unlock(). thread lock is not fixed, it might be sleep-queue's 
spinlock
or per-cpu runqueue lock, there even is a blocked spin-lock for 
intermediate state
change.

> Thank you.
>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5019E500.8060105>