3 using System.Threading;
4 using System.Collections;
5 using System.Collections.Generic;
10 static object count_lock = new object();
12 const long N = 500000;
13 const int num_threads = 8;
15 static void UseMemory () {
17 for (int i = 0; i < N; ++i) {
19 var l1 = new ArrayList ();
21 var l2 = new ArrayList ();
23 var l3 = new ArrayList ();
25 var l4 = new ArrayList ();
33 Monitor.PulseAll(count_lock);
37 static void Timer_Elapsed(object sender, EventArgs e)
39 HashSet<string> h = new HashSet<string>();
40 for (int j = 0; j < 10000; j++)
46 static void Main (string[] args) {
49 for (TestTimeout timeout = TestTimeout.Start(TimeSpan.FromSeconds(TestTimeout.IsStressTest ? 120 : 5)); timeout.HaveTimeLeft;)
53 List<Thread> threads = new List<Thread>();
54 List<System.Timers.Timer> timers = new List<System.Timers.Timer>();
56 for (int i = 0; i < num_threads; i++)
58 Thread t3 = new Thread (delegate () {
64 System.Timers.Timer timer = new System.Timers.Timer();
65 timer.Elapsed += Timer_Elapsed;
66 timer.AutoReset = false;
67 timer.Interval = 1000;
72 for (int i = 0; i < 4000; i++)
74 System.Timers.Timer timer = new System.Timers.Timer();
75 timer.Elapsed += Timer_Elapsed;
76 timer.AutoReset = false;
84 while (count < num_threads)
87 Monitor.Wait(count_lock);
91 foreach (var t in threads)
100 Console.WriteLine ($"done {iterations} iterations");