[K/N] Avoid inlining of ignored check on external call

This commit is contained in:
Pavel Kunyavskiy
2022-10-04 14:49:19 +02:00
committed by Space Team
parent 6ff282eca3
commit c4e2901a1d
+8 -5
View File
@@ -36,20 +36,23 @@ class SpinLock;
template <>
class SpinLock<MutexThreadStateHandling::kIgnore> : private Pinned {
public:
// No need to check for external calls, because we explicitly ignore thread state.
NO_EXTERNAL_CALLS_CHECK void lock() noexcept {
void lock() noexcept {
while(flag_.test_and_set(std::memory_order_acquire)) {
std::this_thread::yield();
yield();
}
}
// No need to check for external calls, because we explicitly ignore thread state.
NO_EXTERNAL_CALLS_CHECK void unlock() noexcept {
void unlock() noexcept {
flag_.clear(std::memory_order_release);
}
private:
std::atomic_flag flag_ = ATOMIC_FLAG_INIT;
// No need to check for external calls, because we explicitly ignore thread state.
static NO_EXTERNAL_CALLS_CHECK NO_INLINE void yield() {
std::this_thread::yield();
}
};
template <>