static void FaradayTest(HiscoreTable _table) { _table.Enter("Edison", 100); _table.Enter("Faraday", 23); _table.Enter("Faraday", 100); _table.Enter("Edison", 100); }
// ReadWriterLockSlim demo methods static void TeslaTest(HiscoreTable _table) { _table.Enter("Tesla", 10); _table.Enter("Tesla", 10); _table.Enter("Tesla", 100); _table.Delete("Faraday"); }
static void ReadWriterLockSlimDemo() { Console.WriteLine("ReadWriterLockSlim demo"); var random = new Random(); // The data the threads will attempt to manipulate var hiscore_table = new HiscoreTable(); // Create a few worker threads const int NUM_THREADS = 10; var threads = new Thread[NUM_THREADS]; // Assign random tasks to the threads for (int i = 0; i < NUM_THREADS; i++) { ThreadDelegate thread_delegate = () => {}; switch (random.Next(3)) { case 0: thread_delegate = () => TeslaTest(hiscore_table); break; case 1: thread_delegate = () => EdisonTest(hiscore_table); break; case 2: thread_delegate = () => FaradayTest(hiscore_table); break; } threads[i] = new Thread(new ThreadStart(thread_delegate)); threads[i].Name = String.Format("Thread {0}", i); } // Start the threads for (int i = 0; i < NUM_THREADS; i++) { threads[i].Start(); } // Block until all threads are finished for (int i = 0; i < NUM_THREADS; i++) { threads[i].Join(); } Console.Write(Environment.NewLine); }
static void EdisonTest(HiscoreTable _table) { _table.Enter("Edison", 1000); _table.Delete("Edison"); _table.Delete("Tesla"); }