using System;
using System.Threading;
public class Test
{
static Thread winner = null;
private static void MyFunc()
{
Thread.Sleep((int)(new Random().NextDouble() * 1000));
Interlocked.CompareExchange(ref winner, Thread.CurrentThread, null);
}
public static void Main()
{
Thread thread1 = new Thread(() => MyFunc());
Thread thread2 = new Thread(() => MyFunc());
Thread thread3 = new Thread(() => MyFunc());
thread1.Name = "thread1";
thread2.Name = "thread2";
thread3.Name = "thread3";
thread1.Start();
thread2.Start();
thread3.Start();
thread1.Join();
thread2.Join();
thread3.Join();
Console.WriteLine("The winner is {0}", winner.Name);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwoKcHVibGljIGNsYXNzIFRlc3QKewoJc3RhdGljIFRocmVhZCB3aW5uZXIgPSBudWxsOwoJCglwcml2YXRlIHN0YXRpYyB2b2lkIE15RnVuYygpCgl7CgkJVGhyZWFkLlNsZWVwKChpbnQpKG5ldyBSYW5kb20oKS5OZXh0RG91YmxlKCkgKiAxMDAwKSk7CgkJSW50ZXJsb2NrZWQuQ29tcGFyZUV4Y2hhbmdlKHJlZiB3aW5uZXIsIFRocmVhZC5DdXJyZW50VGhyZWFkLCBudWxsKTsKCX0KCQoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCVRocmVhZCB0aHJlYWQxID0gbmV3IFRocmVhZCgoKSA9PiBNeUZ1bmMoKSk7CgkgICAgVGhyZWFkIHRocmVhZDIgPSBuZXcgVGhyZWFkKCgpID0+IE15RnVuYygpKTsKCSAgICBUaHJlYWQgdGhyZWFkMyA9IG5ldyBUaHJlYWQoKCkgPT4gTXlGdW5jKCkpOwoJCgkJdGhyZWFkMS5OYW1lID0gInRocmVhZDEiOwoJCXRocmVhZDIuTmFtZSA9ICJ0aHJlYWQyIjsKCQl0aHJlYWQzLk5hbWUgPSAidGhyZWFkMyI7CgkJCgkgICAJdGhyZWFkMS5TdGFydCgpOwoJICAgCXRocmVhZDIuU3RhcnQoKTsKCSAgIAl0aHJlYWQzLlN0YXJ0KCk7CgkKCSAgIAl0aHJlYWQxLkpvaW4oKTsKCSAgIAl0aHJlYWQyLkpvaW4oKTsKCSAgIAl0aHJlYWQzLkpvaW4oKTsKCSAgIAkKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiVGhlIHdpbm5lciBpcyB7MH0iLCB3aW5uZXIuTmFtZSk7Cgl9Cn0=