Вход на сайт
Задачка на синхронизацию
1625 просмотров
Перейти к просмотру всей ветки
NightWatch коренной житель
в ответ Fleitist 23.02.24 20:19
Что-то типа этого?
public class MyClass { private readonly Synchronization sync = new Synchronization(); public void MethodA() { sync.EnterParallel(); try { // body } finally { sync.ExitParallel(); } } public void MethodB() { sync.EnterParallel(); try { // body } finally { sync.ExitParallel(); } } public void MethodC() { sync.Enter(); try { // body } finally { sync.Exit(); } } public void MethodD() { sync.Enter(); try { // body } finally { sync.Exit(); } } public void MethodE() { sync.Enter(); try { // body } finally { sync.Exit(); } } private class Synchronization { private readonly object syncRoot = new object(); private readonly object counterSync = new object(); private int counter = 0; public void Enter() { Monitor.Enter(syncRoot); } public void EnterParallel() { lock (counterSync) { if (counter < 1) { Monitor.Enter(syncRoot); } counter++; } } public void Exit() { Monitor.Exit(syncRoot); } public void ExitParallel() { lock (counterSync) { counter--; if (counter < 1) { Monitor.Exit(syncRoot); } } } } }