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) {
48 for (int j = 0; j < 2; j++)
52 List<Thread> threads = new List<Thread>();
53 List<System.Timers.Timer> timers = new List<System.Timers.Timer>();
55 for (int i = 0; i < num_threads; i++)
57 Thread t3 = new Thread (delegate () {
63 System.Timers.Timer timer = new System.Timers.Timer();
64 timer.Elapsed += Timer_Elapsed;
65 timer.AutoReset = false;
66 timer.Interval = 1000;
71 for (int i = 0; i < 4000; i++)
73 System.Timers.Timer timer = new System.Timers.Timer();
74 timer.Elapsed += Timer_Elapsed;
75 timer.AutoReset = false;
83 while (count < num_threads)
85 Monitor.Wait(count_lock);
89 foreach (var t in threads)