[Development] Maintainer changes to review: QMutex optimisations
Thiago Macieira
thiago.macieira at intel.com
Sun Aug 26 18:35:54 CEST 2012
On domingo, 26 de agosto de 2012 18.23.48, Olivier Goffart wrote:
> The design of the current QMutex is so that it is free in the non contended
> case, so we can use in libraries and it does not have much overhead on code
> that we want to make thread safe, but will most likely not be used with
> threads.
> You can also have a lot of mutex and increase the granularity.
> But QMutex can of course be used in a contended case. There will be a small
> overhead, but it should be neglectible compared to the cost of blocking.
>
> Then, QBasicMutex was built out of QMutex, in order to improve further the
> global mutexes.
>
> I hope you understand my point of view here. QBasicMutex is to QMutex what
> QBasicAtomicInt is to QAtomicInt. It's the same, but one is POD.
Not completely.
It's missing a Q_BASIC_MUTEX_INITIALIZER. For that reason, QBasicMutex can
only be used as a global or static variable, never on the heap or as part of a
class.
> But with your changes, you seem to think that QMutex and QBasicMutex two
> different classes with different API.
No, they are similar API. But it seems to me we're constraining QMutex so that
we can have a POD mutex. Unfortunately, except for Linux futexes, there is no
such thing as POD mutexes with no initialisation and no destruction. All other
implementations (Windows pre-8, Mac, pthread) require initialisation and
destruction.
> You are also implying that a cheap memory overhead, and cheap uncontended
> locking are not worth it. Based on an extreme benchmark that is way too
> contended to be usefull.
No, I'm not implying that.
Cheap uncontended locking are definitely goals. We've done that in Qt 4 to
great success.
What I'm challenging is that the overhead for contended is not as cheap as the
current design expects it to be. The current design strongly disfavours
extremely-threaded scenarios. The contention doesn't happen only on a single
mutex, but also when two unrelated mutexes are contending, as there's a shared
structure they must access.
In that light, I have to wonder whether paying the cost of initialisation and
destruction wouldn't be more worth it.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel Open Source Technology Center
Intel Sweden AB - Registration Number: 556189-6027
Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 190 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.qt-project.org/pipermail/development/attachments/20120826/70ee7141/attachment.sig>
More information about the Development
mailing list