//конструкция пользовательского режима - аналог lock static void SpinLock() { SinchroSpinLock e = new SinchroSpinLock(); ISinchroThreading o = e; //т.к SinchroSpinLock структура, будет передаваться копия в разделяемый ресурс, соответственно синхронизация не будет работать for (int i = 0; i < 3; i++) { Task.Run(() => SharedResourse(o)); } }
static private void SharedResourse(ISinchroThreading s) { s.Enter(); if (s is SynchroMutex) { s.Enter(); } Thread.Sleep(500); Console.WriteLine("Thread {0} started!", Thread.CurrentThread.ManagedThreadId); Thread.Sleep(100000); Console.WriteLine("Thread {0} done!", Thread.CurrentThread.ManagedThreadId); s.Exit(); if (s is SynchroMutex) { s.Exit(); } }