mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-12-21 03:02:02 +00:00
7c989f88bd
* dotnet format style --severity info Some changes were manually reverted. * dotnet format analyzers --serverity info Some changes have been minimally adapted. * Restore a few unused methods and variables * Silence dotnet format IDE0052 warnings * Address dotnet format CA1816 warnings * Address or silence dotnet format CA1069 warnings * Address remaining dotnet format analyzer warnings * Address review comments * Address most dotnet format whitespace warnings * Apply dotnet format whitespace formatting A few of them have been manually reverted and the corresponding warning was silenced * Revert formatting changes for while and for-loops * Another rebase, another dotnet format run * Run dotnet format whitespace after rebase * Run dotnet format style after rebase * Run dotnet format analyzers after rebase * Run dotnet format after rebase and remove unused usings - analyzers - style - whitespace * Disable 'prefer switch expression' rule * Add comments to disabled warnings * Simplify properties and array initialization, Use const when possible, Remove trailing commas * Start working on disabled warnings * Address IDE0251 warnings * Revert "Simplify properties and array initialization, Use const when possible, Remove trailing commas" This reverts commit 9462e4136c0a2100dc28b20cf9542e06790aa67e. * dotnet format whitespace after rebase * First dotnet format pass * Address review feedback * Add trailing commas * Remove SuppressMessage for IDE0066 * Make explicit Equals implementation implicit
62 lines
1.4 KiB
C#
62 lines
1.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
|
|
namespace Ryujinx.Graphics.GAL.Multithreading
|
|
{
|
|
class SyncMap : IDisposable
|
|
{
|
|
private readonly HashSet<ulong> _inFlight = new();
|
|
private readonly AutoResetEvent _inFlightChanged = new(false);
|
|
|
|
internal void CreateSyncHandle(ulong id)
|
|
{
|
|
lock (_inFlight)
|
|
{
|
|
_inFlight.Add(id);
|
|
}
|
|
}
|
|
|
|
internal void AssignSync(ulong id)
|
|
{
|
|
lock (_inFlight)
|
|
{
|
|
_inFlight.Remove(id);
|
|
}
|
|
|
|
_inFlightChanged.Set();
|
|
}
|
|
|
|
internal void WaitSyncAvailability(ulong id)
|
|
{
|
|
// Blocks until the handle is available.
|
|
|
|
bool signal = false;
|
|
|
|
while (true)
|
|
{
|
|
lock (_inFlight)
|
|
{
|
|
if (!_inFlight.Contains(id))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
_inFlightChanged.WaitOne();
|
|
signal = true;
|
|
}
|
|
|
|
if (signal)
|
|
{
|
|
// Signal other threads which might still be waiting.
|
|
_inFlightChanged.Set();
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_inFlightChanged.Dispose();
|
|
}
|
|
}
|
|
}
|