MCPcopy Create free account
hub / github.com/Pagghiu/SaneCppLibraries / exchange

Method exchange

Libraries/Threading/Atomic.cpp:184–205  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

182}
183
184int32_t Atomic<int32_t>::exchange(int32_t desired, memory_order mem)
185{
186#if _MSC_VER
187#if defined(_M_ARM) || defined(_M_ARM64) || defined(_M_ARM64EC)
188 switch (mem)
189 {
190 case memory_order_relaxed: return _InterlockedExchange_nf(reinterpret_cast<volatile long*>(&value), desired);
191 case memory_order_acquire: return _InterlockedExchange_acq(reinterpret_cast<volatile long*>(&value), desired);
192 case memory_order_release: return _InterlockedExchange_rel(reinterpret_cast<volatile long*>(&value), desired);
193 case memory_order_acq_rel:
194 case memory_order_seq_cst:
195 default: // consume is treated as acquire
196 return _InterlockedExchange(reinterpret_cast<volatile long*>(&value), desired);
197 }
198#else
199 (void)mem;
200 return _InterlockedExchange(reinterpret_cast<volatile long*>(&value), desired);
201#endif
202#else
203 return __atomic_exchange_n(&value, desired, mem);
204#endif
205}
206
207bool Atomic<int32_t>::compare_exchange_weak(int32_t& expected, int32_t desired, memory_order success,
208 memory_order failure)

Callers 9

testThreadMethod · 0.45
consumePendingWakeUpsMethod · 0.45
monitoringLoopThreadMethod · 0.45
closeMethod · 0.45
executeWakeUpsMethod · 0.45

Calls

no outgoing calls

Tested by 3

testThreadMethod · 0.36