improving threading / osl::Condition abstraction ...
michael.meeks at collabora.com
Thu Nov 28 10:00:28 PST 2013
I was writing a thread-pool class the other day - against the clock cf.
master's sc/source/filter/oox/threadpool.* - and it was interesting to
become a victim of the apparently well known lost wakeup issue that our
approach to osl::Conditions creates.
I propose the following patch to osl::Condition:
diff --git a/include/osl/conditn.hxx b/include/osl/conditn.hxx
index 5ca0323..33a0fcc 100644
@@ -29,7 +29,13 @@
+ * Warning: the Condition abstraction is inadequate for any
+ * situation where there may be multiple threads waiting on
+ * the same condition. It can only be used to synchronise
+ * interactions between two threads cf. lost wakeups in:
+ * http://www.cs.wustl.edu/~schmidt/win32-cv-1.html
Until we fix it.
The real question is: should we fix it in-place - by deprecating the
'set' and 'reset' methods; and adding the familiar: 'signal' 'broadcast'
and a wait( Mutex &rMutex ) - method - preferably implemented on Windows
using Norbert's abstraction:
or something similar / better.
Or - should we deprecate it and use something else (boost?) wherever
possible with an easy [sic] hack to replace our threading code with
The basic problem is; and I quote the above win32-cv-1.html link:
"The lack of condition variables in Win32 makes it
harder to implement certain concurrency abstractions, such
as thread-safe message queues and thread pools."
To which I can only say "Amen" - the existing API makes every instance
of threading I add a spectacularly horribly nervous exercise in
considering un-necessary interleavings between Mutexes and Conditions
that should not have to be.
As we start to move carefully selected pieces of the code-base to use
threading to take advantage of all that unused silicon doing not much on
our machines - it would be great to improve the helpers so that we get a
better result =)
Thoughts much appreciated,
PS. Stephan - any chance you can reply-to-All ? ;-)
michael.meeks at collabora.com <><, Pseudo Engineer, itinerant idiot
More information about the LibreOffice