Ejemplo n.º 1
0
 internal virtual void Release()
 {
     if (SharedConflict)
     {
         Client.releaseShared(ResourceType, ResourceId);
     }
     else
     {
         Client.releaseExclusive(ResourceType, ResourceId);
     }
 }
Ejemplo n.º 2
0
            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;
                }
            }