[ECOS] Why to signal condvar with mutex held?

Sergei Organov osv@topconrd.ru
Wed Nov 24 14:36:00 GMT 2004


Hi,

Browsing eCos sources and documentation, I've observed that condvars are
usually being signalled with associated mutex locked. However, as far as
I understand, it is sub-optimal from the point of view of execution time
as it could lead to additional context switches. Consider the following
scenario:

1. thread1 signals condvar.
2. thread2 wakes up and preempts thread1 (context switch 1) only to see
   that the mutex is locked.
3. thread2 goes to wait on the locked mutex, thread1 is resumed (context
   switch 2).
4. thread1 unlocks mutex.
5. thread2 wakes up and preempts thread1 (context switch 3).

Thus, we end up with 3 context switches instead of 1.

So there are the questions:

1. Does this problem actually exist, or am I missing something [1]?

2. Is it allowed in eCos to signal/broadcast condvar with mutex
   unlocked? I almost sure it is, for signalling from DSR would be
   impossible if it weren't.

3. If both of the above are true, isn't it better to signal/broadcast
   with mutex unlocked?

Thanks in advance.

[1] E.g., it could be the case that optimization called "wait morphing"[2]
    is implemented in eCos, but I fail to see it.

[2] At least it's how David R. Butenhof calls it in its "Programming
    with POSIX Threads" book.

-- 
Sergei.


-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss



More information about the Ecos-discuss mailing list