public void Set(Data_Set DS) { T = new long[Size]; for (int i = 0; i < Size; i++) { T[i] = DS.T[i]; } }
public bool Is_New_Data_Set() { bool New_Data_Set = false; string FileName = Get_Dir_By_ACID_AND_IFPLID(ACID, IFPLID); char[] delimiterChars = { ' ' }; StreamReader MyStreamReader = null; string Data_Set; try { // Lets read in settings from the file MyStreamReader = System.IO.File.OpenText(FileName); while (MyStreamReader.Peek() >= 0) { Data_Set = MyStreamReader.ReadLine(); if (Data_Set[0] != '#') { string[] words = Data_Set.Split(delimiterChars); switch (words[0]) { case "ADEP": if (ADEP != words[1]) { New_Data_Set = true; } break; case "ADES": if (ADES != words[1]) { New_Data_Set = true; } break; case "EOBT": if (EOBT != words[1]) { New_Data_Set = true; } break; case "EOBD": if (EOBD != words[1]) { New_Data_Set = true; } break; default: break; } } } } catch (Exception e) { CBS_Main.WriteToLogFile("Error in EFD Message " + e.Message); MyStreamReader.Close(); MyStreamReader.Dispose(); } MyStreamReader.Close(); MyStreamReader.Dispose(); return(New_Data_Set); }
public Data_Set(Data_Set DS) { Set(DS); }
//------------------------------------------------------------------------------ // Main function. static void Main(string[] args) { // Console. const int Columns = 120; const int Lines = (Silent ? 50 : 500); Console.SetBufferSize(Columns, Lines); Console.SetWindowSize(Columns, 40); // Threads. const int Nb_Threads = Nb_Reading_Threads + Nb_Writing_Threads; const int Max = (Silent ? 50000 : (Columns * (Lines - 5 - (3 * Nb_Threads))) / Nb_Threads); while (true) { // Console. Console.Clear(); Console.WriteLine(""); switch (Lock_Mode) { case Mode.Mutex: Console.WriteLine("---------- Mutex ----------"); break; case Mode.Slim: Console.WriteLine("---------- Slim ----------"); break; default: Console.WriteLine("---------- Unsafe ----------"); break; } Console.WriteLine(""); Console.WriteLine(Nb_Reading_Threads + " reading threads + " + Nb_Writing_Threads + " writing threads"); Console.WriteLine(""); // Flags to monitor all threads. bool[] Completed = new bool[Nb_Threads]; for (int i = 0; i < Nb_Threads; i++) { Completed[i] = false; } // Threads that change the values. for (int W = 0; W < Nb_Writing_Threads; W++) { var Writing_Thread = new Thread((state) => { int t = (int)state; int u = t % 10; Data_Set DS = new Data_Set(t + 1); try { for (int k = 0; k < Max; k++) { Safe_Data = DS; if (!Silent) { Console.Write(u); } } } catch (Exception ex) { Console.WriteLine("\r\n" + "Writing thread " + (t + 1) + " / " + ex.Message + "\r\n"); } Completed[Nb_Reading_Threads + t] = true; }); Writing_Thread.Start(W); } // Threads that read the values. for (int R = 0; R < Nb_Reading_Threads; R++) { var Reading_Thread = new Thread((state) => { int t = (int)state; char u = (char)((int)('A') + (t % 10)); try { for (int j = 0; j < Max; j++) { Data_Set DS = Safe_Data; for (int i = 0; i < Data_Set.Size; i++) { if (DS.T[i] != DS.T[0]) { string Log = ""; for (int k = 0; k < Data_Set.Size; k++) { Log += DS.T[k] + " "; } throw new Exception("Iteration " + (i + 1) + "\r\n" + Log); } } if (!Silent) { Console.Write(u); } } } catch (Exception ex) { Console.WriteLine("\r\n" + "Reading thread " + (t + 1) + " / " + ex.Message + "\r\n"); } Completed[t] = true; }); Reading_Thread.Start(R); } // Wait for all threads to complete. bool All_Completed = false; while (!All_Completed) { All_Completed = true; for (int i = 0; i < Nb_Threads; i++) { All_Completed &= Completed[i]; } } // END. Console.WriteLine(""); Console.WriteLine("Done!"); Console.ReadLine(); // Toogle mode. switch (Lock_Mode) { case Mode.Unsafe: Lock_Mode = Mode.Mutex; break; case Mode.Mutex: Lock_Mode = Mode.Slim; break; case Mode.Slim: Lock_Mode = Mode.Unsafe; break; } } }