Ryujinx/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedHelpers.cs
2023-04-27 23:51:14 +02:00

28 lines
728 B
C#

using System;
using System.Threading;
namespace Ryujinx.Graphics.GAL.Multithreading
{
static class ThreadedHelpers
{
public static void SpinUntilNonNull<T>(ref T obj) where T : class
{
Span<SpinWait> spinWait = stackalloc SpinWait[1];
while (obj == null)
{
spinWait[0].SpinOnce(-1);
}
}
public static void SpinUntilExchange(ref int target, int value, int comparand)
{
Span<SpinWait> spinWait = stackalloc SpinWait[1];
while (Interlocked.CompareExchange(ref target, value, comparand) != comparand)
{
spinWait[0].SpinOnce(-1);
}
}
}
}