コード例 #1
0
 private static void ExitCritical()
 {
     //BasicConsole.WriteLine("Exiting critical section...");
     if (AccessLockInitialised)
     {
         if (AccessLock == null)
         {
             BasicConsole.WriteLine("GCAccessLock is initialised but null?!");
             BasicConsole.DelayOutput(10);
         }
         else
         {
             AccessLock.Exit();
         }
     }
     //else
     //{
     //    BasicConsole.WriteLine("GCAccessLock not initialised - ignoring lock conditions.");
     //    BasicConsole.DelayOutput(5);
     //}
 }
コード例 #2
0
        private static void EnterCritical(FOS_System.String caller)
        {
            //BasicConsole.WriteLine("Entering critical section...");
            if (AccessLockInitialised)
            {
                if (AccessLock == null)
                {
                    BasicConsole.WriteLine("GCAccessLock is initialised but null?!");
                    BasicConsole.DelayOutput(10);
                }
                else
                {
#if GC_TRACE
                    if (AccessLock.Locked && OutputTrace)
                    {
                        BasicConsole.SetTextColour(BasicConsole.warning_colour);
                        BasicConsole.WriteLine("Warning: GC about to try to re-enter spin lock...");
                        BasicConsole.Write("Enter lock caller: ");
                        BasicConsole.WriteLine(caller);
                        BasicConsole.Write("Previous caller: ");
                        BasicConsole.WriteLine(lastLocker);
                        BasicConsole.SetTextColour(BasicConsole.default_colour);
                    }
#endif

                    AccessLock.Enter();

#if GC_TRACE
                    lastLocker = caller;
#endif
                }
            }
            //else
            //{
            //    BasicConsole.WriteLine("GCAccessLock not initialised - ignoring lock conditions.");
            //    BasicConsole.DelayOutput(5);
            //}
        }