diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2014-02-24 15:23:39 -0800 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-04 04:34:36 +0100 |
commit | e7f685002bb0facb222ac13c21ff4a2257ab76cc (patch) | |
tree | 33b2fa5c53ac081e4ad579c123222d00d0909a70 /src/corelib/thread/qgenericatomic.h | |
parent | 380de7f8e70cfa5f335a065e446dc707d416c1a6 (diff) |
Atomics: implement fetchAndSub on top of fetchAndAdd
Instead of looping unnecessarily on top of testAndSet.
Task-number: QTBUG-37031
Change-Id: I8120f8405eb76dccc9066749cee0a92b0f2da20e
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: Sergio Ahumada <sahumada@blackberry.com>
Diffstat (limited to 'src/corelib/thread/qgenericatomic.h')
-rw-r--r-- | src/corelib/thread/qgenericatomic.h | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/src/corelib/thread/qgenericatomic.h b/src/corelib/thread/qgenericatomic.h index 0c66d45855..aeed199c97 100644 --- a/src/corelib/thread/qgenericatomic.h +++ b/src/corelib/thread/qgenericatomic.h @@ -264,12 +264,8 @@ template <typename BaseClass> struct QGenericAtomicOps template <typename T> static inline always_inline T fetchAndSubRelaxed(T &_q_value, typename QAtomicAdditiveType<T>::AdditiveT operand) Q_DECL_NOTHROW { - // implement fetchAndSub on top of testAndSet - Q_FOREVER { - T tmp = BaseClass::load(_q_value); - if (BaseClass::testAndSetRelaxed(_q_value, tmp, T(tmp - operand))) - return tmp; - } + // implement fetchAndSub on top of fetchAndAdd + return fetchAndAddRelaxed(_q_value, -operand); } template <typename T> static inline always_inline |