Do you really "sleep" when blocked on a mutex?

Murty, Ravi ravi.murty at intel.com
Mon Apr 21 19:01:31 UTC 2008


Hello,

 

When a thread cannot get a mutex (default mutex) and needs to be
blocked, is it really put to sleep? From looking at the code it appears
that it is inhibited (TD_SET_LOCK) but isn't really put to sleep.

 

1.	Why isn't it put to sleep - why can't it be treated the same?
2.	The eventual question I am trying to answer is the difference
between setrunnable() and setrunqueue() - this one simply finds a slot
in the ksegrp and a runq to add the KSE/td. But setrunnable() also
checks to see if the process is in memory (PS_INMEM) before calling
sched_wakeup which eventually calls setrunqueue()? Why doesn't
setrunqueue have to worry about the possibility that the process may
have been swapped out while it was waiting to become runnable?

 

Thanks

Ravi

 



More information about the freebsd-hackers mailing list