linux-packaging-mono/mono/tests/thread-static.cs
Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

56 lines
1.1 KiB
C#

using System;
using System.Threading;
using System.Reflection;
class T {
[ThreadStatic]
static int var = 5;
static bool tfailed = true;
static void thread () {
tfailed = false;
if (var != 0)
tfailed = true;
Console.WriteLine ("start value: {0}", var);
for (int i = 0; i < 10; ++i) {
var += 10;
Thread.Sleep (5);
}
Console.WriteLine ("end value: {0}", var);
if (var != 100)
tfailed = true;
}
static int Main () {
bool failed = false;
var = 10;
Thread thr = new Thread (new ThreadStart (thread));
thr.Start ();
if (var != 10)
failed = true;
var = 20;
Console.WriteLine ("value in main thread: {0}", var);
thr.Join ();
Console.WriteLine ("value in main thread after join: {0}", var);
if (var != 20)
failed = true;
if (failed)
return 1;
if (tfailed)
return 2;
/* Test access though reflection */
var = 42;
FieldInfo fi = typeof (T).GetField ("var", BindingFlags.NonPublic|BindingFlags.Static);
if ((int)fi.GetValue (null) != 42)
return 3;
fi.SetValue (null, 43);
if (var != 43)
return 4;
return 0;
}
}