mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Fix SharedSingleton to use memoryBarrier
This commit is contained in:
@@ -92,6 +92,7 @@ public:
|
|||||||
bassert (lifetime == SingletonLifetime::createOnDemand || ! staticData.destructorCalled);
|
bassert (lifetime == SingletonLifetime::createOnDemand || ! staticData.destructorCalled);
|
||||||
staticData.instance = &staticData.object;
|
staticData.instance = &staticData.object;
|
||||||
new (staticData.instance) SharedSingleton (lifetime);
|
new (staticData.instance) SharedSingleton (lifetime);
|
||||||
|
memoryBarrier();
|
||||||
instance = staticData.instance;
|
instance = staticData.instance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -131,9 +131,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
Type compareAndSetValue (Type newValue, Type valueToCompare) noexcept;
|
Type compareAndSetValue (Type newValue, Type valueToCompare) noexcept;
|
||||||
|
|
||||||
/** Implements a memory read/write barrier. */
|
|
||||||
static void memoryBarrier() noexcept;
|
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
#if BEAST_64BIT
|
#if BEAST_64BIT
|
||||||
BEAST_ALIGN (8)
|
BEAST_ALIGN (8)
|
||||||
@@ -373,8 +370,7 @@ inline Type Atomic<Type>::compareAndSetValue (const Type newValue, const Type va
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Type>
|
inline void memoryBarrier() noexcept
|
||||||
inline void Atomic<Type>::memoryBarrier() noexcept
|
|
||||||
{
|
{
|
||||||
#if BEAST_ATOMICS_MAC
|
#if BEAST_ATOMICS_MAC
|
||||||
OSMemoryBarrier();
|
OSMemoryBarrier();
|
||||||
@@ -389,4 +385,5 @@ inline void Atomic<Type>::memoryBarrier() noexcept
|
|||||||
#pragma warning (pop)
|
#pragma warning (pop)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // BEAST_ATOMIC_H_INCLUDED
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -322,14 +322,14 @@ public:
|
|||||||
test.expect (a.get() == (Type) 10);
|
test.expect (a.get() == (Type) 10);
|
||||||
a += (Type) 15;
|
a += (Type) 15;
|
||||||
test.expect (a.get() == (Type) 25);
|
test.expect (a.get() == (Type) 25);
|
||||||
a.memoryBarrier();
|
memoryBarrier();
|
||||||
a -= (Type) 5;
|
a -= (Type) 5;
|
||||||
test.expect (a.get() == (Type) 20);
|
test.expect (a.get() == (Type) 20);
|
||||||
test.expect (++a == (Type) 21);
|
test.expect (++a == (Type) 21);
|
||||||
++a;
|
++a;
|
||||||
test.expect (--a == (Type) 21);
|
test.expect (--a == (Type) 21);
|
||||||
test.expect (a.get() == (Type) 21);
|
test.expect (a.get() == (Type) 21);
|
||||||
a.memoryBarrier();
|
memoryBarrier();
|
||||||
|
|
||||||
testFloat (test);
|
testFloat (test);
|
||||||
}
|
}
|
||||||
@@ -338,7 +338,7 @@ public:
|
|||||||
{
|
{
|
||||||
Atomic<Type> a, b;
|
Atomic<Type> a, b;
|
||||||
a = (Type) 21;
|
a = (Type) 21;
|
||||||
a.memoryBarrier();
|
memoryBarrier();
|
||||||
|
|
||||||
/* These are some simple test cases to check the atomics - let me know
|
/* These are some simple test cases to check the atomics - let me know
|
||||||
if any of these assertions fail on your system!
|
if any of these assertions fail on your system!
|
||||||
|
|||||||
Reference in New Issue
Block a user