thread scheduling at mutex unlock

David Schwartz davids at
Thu May 15 00:40:37 UTC 2008

> I am trying the small attached program on FreeBSD 6.3 (amd64,
> SCHED_4BSD) and 7-STABLE (i386, SCHED_ULE), both with libthr as threads
> library and on both it produces "BROKEN" message.
> I compile this program as follows:
> cc sched_test.c -o sched_test -pthread
> I believe that the behavior I observe is broken because: if thread #1
> releases a mutex and then tries to re-acquire it while thread #2 was
> already blocked waiting on that mutex, then thread #1 should be "queued"
> after thread #2 in mutex waiter's list.
> Is there any option (thread scheduler, etc) that I could try to achieve
> "good" behavior?
> P.S. I understand that all this is subject to (thread) scheduler policy,
> but I think that what I expect is more reasonable, at least it is more
> reasonable for my application.
> -- 
> Andriy Gapon

Are you out of your mind?! You are specifically asking for the absolute worst possible behavior!

If you have fifty tiny things to do on one side of the room and fifty tiny things to do on the other side, do you cross the room after each one? Of course not. That would be *ludicrous*.

If you want/need strict alternation, feel free to code it. But it's the maximally inefficient scheduler behavior, and it sure as hell had better not be the default.


More information about the freebsd-threads mailing list