summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMårten Nordheim <marten.nordheim@qt.io>2023-02-23 15:15:46 +0100
committerMårten Nordheim <marten.nordheim@qt.io>2023-02-28 16:49:42 +0100
commitee1651efdd32dfb96443828ddaeddccb3e4e3648 (patch)
tree018747bb83b408a3c3630c05d8c129ed64a5815c /src
parent97dcf1ba1865934b7d047d573443e804699a05e9 (diff)
QtConcurrent: yield CPU when spinning on atomics
Pick-to: 6.5 Change-Id: I3eef19d8737da60bee40385a64a1bc136d2e7329 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src')
-rw-r--r--src/concurrent/qtconcurrentthreadengine.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/concurrent/qtconcurrentthreadengine.cpp b/src/concurrent/qtconcurrentthreadengine.cpp
index d10cca5de7..03e018b0a2 100644
--- a/src/concurrent/qtconcurrentthreadengine.cpp
+++ b/src/concurrent/qtconcurrentthreadengine.cpp
@@ -3,6 +3,8 @@
#include "qtconcurrentthreadengine.h"
+#include <QtCore/private/qsimd_p.h>
+
#if !defined(QT_NO_CONCURRENT) || defined(Q_QDOC)
QT_BEGIN_NAMESPACE
@@ -63,6 +65,7 @@ void ThreadEngineBarrier::acquire()
if (count.testAndSetOrdered(localCount, localCount + 1))
return;
}
+ qYieldCpu();
}
}
@@ -82,6 +85,7 @@ int ThreadEngineBarrier::release()
if (count.testAndSetOrdered(localCount, localCount - 1))
return localCount - 1;
}
+ qYieldCpu();
}
}
@@ -98,6 +102,7 @@ void ThreadEngineBarrier::wait()
semaphore.acquire();
return;
}
+ qYieldCpu();
}
}
@@ -121,6 +126,7 @@ bool ThreadEngineBarrier::releaseUnlessLast()
if (count.testAndSetOrdered(localCount, localCount - 1))
return true;
}
+ qYieldCpu();
}
}