internal virtual void Release() { if (SharedConflict) { Client.releaseShared(ResourceType, ResourceId); } else { Client.releaseExclusive(ResourceType, ResourceId); } }
public override void Run() { try { StartSignal.await(); Stack <object> lockStack = new Stack <object>(); for (int i = 0; i < NumberOfIterations; i++) { try { int depth = DepthCount; do { float f = Rand.nextFloat(); if (f < ReadWriteRatio) { Client.acquireShared(LockTracer.NONE, NODE, NodeId); lockStack.Push(Read); } else { Client.acquireExclusive(LockTracer.NONE, NODE, NodeId); lockStack.Push(Write); } } while (--depth > 0); while (lockStack.Count > 0) { if (lockStack.Pop() == Read) { Client.releaseShared(NODE, NodeId); } else { Client.releaseExclusive(NODE, NodeId); } } } catch (DeadlockDetectedException) { } finally { while (lockStack.Count > 0) { if (lockStack.Pop() == Read) { Client.releaseShared(NODE, NodeId); } else { Client.releaseExclusive(NODE, NodeId); } } } } } catch (Exception e) { Error = e; } }