Merge pull request #5675 from mono/glib-debug-symbols
[mono.git] / mono / tests / thread-signal-wait.cs
1
2 using System;
3 using System.Threading;
4
5 public class Test {
6         static Object mon = new Object();
7         static Object reply = new Object();
8         static Object bogus = new Object();
9         
10         private void Thread_func() {
11                 Console.WriteLine("thread: In a thread!");
12
13                 Thread.Sleep(10000);
14
15                 Console.WriteLine("thread: Waiting for mon");
16
17                 Monitor.Enter(mon);
18                 Monitor.Pulse(mon);
19                 Console.WriteLine("thread: Pulsed mon");
20                 Monitor.Exit(mon);
21
22                 Thread.Sleep(10000);
23
24                 Monitor.Enter(reply);
25                 Console.WriteLine("thread: Got reply mutex");
26                 Monitor.Pulse(reply);
27                 Console.WriteLine("thread: Pulsed reply");
28                 Monitor.Exit(reply);
29         }
30         
31         public static int Main () {
32                 Console.WriteLine ("main: Hello, World!");
33
34                 Test test = new Test();
35                 Thread thr=new Thread(new ThreadStart(test.Thread_func));
36                 thr.Start();
37
38                 Monitor.Enter(mon);
39                 Console.WriteLine("main: mon lock 1");
40
41                 Monitor.Enter(mon);
42                 Console.WriteLine("main: mon lock 2");
43
44                 Console.WriteLine("main: Waiting for mon");
45                 Monitor.Wait(mon);
46                 Console.WriteLine("main: mon waited");
47                 Monitor.Exit(mon);
48
49                 Monitor.Enter(reply);
50                 Console.WriteLine("main: reply locked");
51                 Monitor.Enter(reply);
52                 Console.WriteLine("main: reply locked");
53                 Monitor.Enter(reply);
54                 Console.WriteLine("main: reply locked");
55                 Monitor.Enter(reply);
56                 Console.WriteLine("main: reply locked");
57                 Monitor.Wait(reply);
58                 Console.WriteLine("main: reply waited");
59                 Monitor.Exit(reply);
60
61                 Console.WriteLine("Seeing how many locks we have...");
62                 Monitor.Exit(reply);
63                 Console.WriteLine("main: Exit reply");
64                 Monitor.Exit(reply);
65                 Console.WriteLine("main: Exit reply");
66                 Monitor.Exit(reply);
67                 Console.WriteLine("main: Exit reply");
68                 Monitor.Exit(reply);
69                 Console.WriteLine("main: Exit reply");
70                 Monitor.Exit(reply);
71                 Console.WriteLine("main: Exit reply");
72                 Monitor.Exit(reply);
73                 Console.WriteLine("main: Exit reply");
74                 Monitor.Exit(reply);
75                 Console.WriteLine("main: Exit reply");
76
77                 Monitor.Exit(bogus);
78                 Console.WriteLine("main: Exit bogus");
79                 
80                 return 0;
81         }
82 }
83