public void localQueueFairnessChecking(object o)
        {
            int order = (int)o;

            while (true)
            {
                if (isStop)
                {
                    return;
                }
                while (SCCQueueArray[order].Count > 0)
                {
                    if (isStop)
                    {
                        return;
                    }
                    SCCInformation SCC = null;
                    SCCQueueArray[order].TryDequeue(out SCC);
                    Dictionary <string, LocalPair> fairSCC = IsFair(SCC.newSCC, SCC.newOutgoingTransitionTable);
                    if (fairSCC != null)
                    {
                        localTarjanFairnessReport(SCC.newSCC, SCC.newCallStack, SCC.newOutgoingTransitionTable);
                        return;
                    }
                }
            }
        }
        private void localQueueSCC(int order, Dictionary <string, LocalPair> newSCC, Stack <LocalPair> callStack, Dictionary <string, List <string> > outgoingTransitionTable)
        {
            //if (isStop)
            //{
            //    return;
            //}

            // copy callStack
            Stack <LocalPair> newCallStack = new Stack <LocalPair>(callStack.Count);

            LocalPair[] callStackArray = callStack.ToArray();
            for (int i = callStackArray.Length - 1; i >= 0; i--)
            {
                newCallStack.Push(callStackArray[i]);
            }

            // copy outgoing transition table
            Dictionary <string, List <string> > newOutgoingTransitionTable = new Dictionary <string, List <string> >(1024);

            foreach (KeyValuePair <string, LocalPair> kv in newSCC)
            {
                string s = kv.Key;
                newOutgoingTransitionTable.Add(s, outgoingTransitionTable[s]);
            }

            // create & queue SCC information
            SCCInformation SCC = new SCCInformation(newSCC, newCallStack, newOutgoingTransitionTable);

            SCCQueueArray[order].Enqueue(SCC);
        }