1
0
Fork 0
mirror of https://github.com/Ryujinx/Ryujinx.git synced 2024-12-21 03:02:02 +00:00
Ryujinx/src/Ryujinx.Graphics.GAL/Multithreading/SyncMap.cs
TSRBerry 7c989f88bd
[Ryujinx.Graphics.GAL] Address dotnet-format issues (#5366)
* 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
2023-06-28 20:20:10 +02:00

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();
}
}
}