Merge pull request #5406 from kumpera/fix_12157
[mono.git] / mono / tests / threadpool1.cs
1 using System;
2 using System.Threading;
3
4 public class Test {
5
6         static int csum = 0;
7         
8         public static void test_callback (object state) {
9                 int workerThreads;
10                 int completionPortThreads;
11                 ThreadPool.GetAvailableThreads (out workerThreads, out completionPortThreads);
12                 Console.WriteLine("test_casllback:" + state + "ATH: " + workerThreads);
13                 Thread.Sleep (10);
14
15                 Interlocked.Increment (ref csum);
16         }
17         
18         public static int Main () {
19                 int workerThreads;
20                 int completionPortThreads;
21                 int runs = 10;
22                 
23                 ThreadPool.GetMaxThreads (out workerThreads, out completionPortThreads);
24                 Console.WriteLine ("workerThreads: {0} completionPortThreads: {1}", workerThreads, completionPortThreads);
25
26                 ThreadPool.GetAvailableThreads (out workerThreads, out completionPortThreads);
27                 Console.WriteLine ("workerThreads: {0} completionPortThreads: {1}", workerThreads, completionPortThreads);
28
29                 for (int i = 0; i < runs; i++) {
30                         ThreadPool.QueueUserWorkItem (new WaitCallback (test_callback), "TEST1 " + i);
31                         ThreadPool.QueueUserWorkItem (new WaitCallback (test_callback), "TEST2 " + i);
32                         ThreadPool.QueueUserWorkItem (new WaitCallback (test_callback), "TEST3 " + i);
33                         ThreadPool.QueueUserWorkItem (new WaitCallback (test_callback), "TEST4 " + i);
34                         ThreadPool.QueueUserWorkItem (new WaitCallback (test_callback), "TEST5 " + i);
35
36                         do {
37                                 ThreadPool.GetAvailableThreads (out workerThreads, out completionPortThreads);
38                                 if (workerThreads == 0)
39                                         Thread.Sleep (100);
40                         } while (workerThreads == 0);
41                         
42
43                         ThreadPool.GetAvailableThreads (out workerThreads, out completionPortThreads);
44                         Console.WriteLine ("workerThreads: {0} completionPortThreads: {1}", workerThreads, completionPortThreads);
45                 }
46
47                 while (csum < (runs * 5)) {
48                         Thread.Sleep (100);
49
50                 }
51                 
52                 Console.WriteLine ("CSUM: " + csum);
53
54                 if (csum != (runs * 5))
55                         return 1;
56                 
57                 return 0;
58         }
59 }
60