using System.Threading;
using System.Runtime.CompilerServices;
-class Test {
+class Tests {
+
+ // We use Monitor.Pulse to test that the object is synchronized
[MethodImplAttribute(MethodImplOptions.Synchronized)]
public int test () {
- Monitor.Exit (this);
- Monitor.Enter (this);
+ Monitor.Pulse (this);
+ //Monitor.Enter (this);
return 2 + 2;
}
[MethodImplAttribute(MethodImplOptions.Synchronized)]
public static int test_static () {
- Monitor.Exit (typeof (Test));
- Monitor.Enter (typeof (Test));
+ Monitor.Pulse (typeof (Tests));
return 2 + 2;
}
[MethodImplAttribute(MethodImplOptions.Synchronized)]
public virtual int test_virtual () {
- Monitor.Exit (this);
- Monitor.Enter (this);
+ Monitor.Pulse (this);
return 2 + 2;
}
+ public static bool is_synchronized (object o) {
+ try {
+ Monitor.Pulse (o);
+ }
+ catch (SynchronizationLockException ex) {
+ return false;
+ }
+ return true;
+ }
+
public delegate int Delegate1 ();
static public int Main (String[] args) {
- Test b = new Test ();
- int res;
+ Tests b = new Tests ();
+ int res, err;
Console.WriteLine ("Test1...");
b.test ();
+ if (is_synchronized (b))
+ return 1;
+
Console.WriteLine ("Test2...");
test_static ();
+ if (is_synchronized (typeof (Tests)))
+ return 1;
+
Console.WriteLine ("Test3...");
try {
b.test_exception ();
catch (Exception ex) {
// OK
}
+ if (is_synchronized (b))
+ return 1;
Console.WriteLine ("Test4...");
b.test_virtual ();
+ if (is_synchronized (b))
+ return 1;
Console.WriteLine ("Test5...");
Delegate1 d = new Delegate1 (b.test);
res = d ();
+ if (is_synchronized (b))
+ return 1;
Console.WriteLine ("Test6...");
d = new Delegate1 (test_static);
res = d ();
+ if (is_synchronized (typeof (Tests)))
+ return 1;
Console.WriteLine ("Test7...");
d = new Delegate1 (b.test_virtual);
res = d ();
+ if (is_synchronized (b))
+ return 1;
Console.WriteLine ("Test8...");
d = new Delegate1 (b.test_exception);
catch (Exception ex) {
// OK
}
+ if (is_synchronized (b))
+ return 1;
return 0;
}