On Thu, Aug 30, 2007 at 12:08:51PM -0400, frederic.mayot@sgcib.com wrote:
Hi, I'm having a problem with mutexes.
In one thread T1 I have: while(!end) { /* TTT */ lock lk(mutex); dosomethingquick(); }
I'm sure dosomethingquick returns but T2 can never acquires the mutex. If I had a timer on line /* TTT */ in T1 (sleeps for a millisecond), everything works fine.
Can anyone understand such a behavior? Am I doing something wrong here?
A guess: T1 reacquires the mutex before the OS actually dispatches T2 to run. Unlocking the mutex just makes "ready" one of threads waiting for it, but I'm not sure that it's required that the thread be immediately dispatched it onto (a) CPU. When you insert a volountary sleep in T1, the scheduler puts T1 to sleep and chooses another ready thread (T2 in this case) to run. Read on this: http://readlist.com/lists/vger.kernel.org/linux-kernel/31/156171.html