[M3commit] CVS Update: cm3
Antony Hosking
hosking at elego.de
Mon Aug 6 18:35:44 CEST 2007
CVSROOT: /usr/cvs
Changes by: hosking at birch. 07/08/06 18:35:44
Modified files:
cm3/m3-libs/m3core/src/thread/PTHREAD/: ThreadPThread.m3
Log message:
The problem with the pure pthread condition = M3 condition strategy is that it
doesn't play well with alerts on Mac OS X. It turns out signalling the
alerted thread won't wake it up from pthread_cond_wait or
pthread_cond_timedwait, as it will under Linux. This is a problem, since it
means alerted threads can hang around until the main thread exits, leaving no
thread active. Moreover, the timeout does not seem to get delivered even to a
thread waiting on pthread_cond_timedwait, so we can't even use a polling
approach. Thus, I am reverting to the older style of condition using explicit
queues and a per-thread wait condition, which we can signal on alert to wake
up threads in pthread_cond_wait/pthread_cond_timedwait.
Sigh!
In any case, this thread implementation is tested on both Mac OSX Darwin and
Linux. i.e., GUI apps like mentor work correctly.
I will look at coming up with a hybrid implementation that retains 1-1 mapping
of M3 mutexes to pthread mutexes, but implements M3 conditions as they are
in this update, with explicit queues. That way, we will have scalability of
avoiding global locks for mutexes, while retaining desirable M3 alert
behavior.
More information about the M3commit
mailing list