From 694d6c7f77faa67e732a66e9442ea805f851a9ee Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 1 Jan 2020 13:59:46 +0100 Subject: [PATCH] [util] Improve ticket lock implementation Atomic fetch-and-add on unlock is not needed since no other thread can modify the serving counter after the calling thread acquired the lock. May slightly improve performance in games relying on ID3D10Multithread. --- src/util/sync/sync_ticketlock.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/util/sync/sync_ticketlock.h b/src/util/sync/sync_ticketlock.h index ee55433f..1c47f839 100644 --- a/src/util/sync/sync_ticketlock.h +++ b/src/util/sync/sync_ticketlock.h @@ -26,7 +26,8 @@ namespace dxvk::sync { } void unlock() { - m_serving.fetch_add(1, std::memory_order_release); + uint32_t serveNext = m_serving.load() + 1; + m_serving.store(serveNext, std::memory_order_release); } private: