测试目的是要确保线程安全性,一直怀疑特此证明,结果是安全:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace TestPlatform
{
class Program
{
public static volatile bool s_SystemRun = true;
static void Main(string[] args)
{
string order = string.Empty;
do
{
TestCore testCore = new TestCore();
Thread threadTestCore1 = new Thread(new ThreadStart(testCore.ThreadCore1));
threadTestCore1.Start();
Console.WriteLine("Start:"+threadTestCore1.ManagedThreadId.ToString());
Thread threadTestCore2 = new Thread(new ThreadStart(testCore.ThreadCore2));
threadTestCore2.Start();
Console.WriteLine("Start:" + threadTestCore2.ManagedThreadId.ToString());
Console.WriteLine("input exit for close:");
order = Console.ReadLine();
} while (order == null || !order.Equals("exit"));
s_SystemRun = false;
Thread.Sleep(5000);
System.Environment.Exit(0);
return;
}
}
public class TestCore
{
private Func<int, string, int> msgProcess;
public void ThreadCore1()
{
msgProcess = this.msgProcess1;
int delegateThreadId = msgProcess(1, "3");
Console.WriteLine("Test1:" + Thread.CurrentThread.ManagedThreadId.ToString() + ",func:" + delegateThreadId.ToString());
while(Program.s_SystemRun)
{
delegateThreadId = msgProcess(1, "3");
if (delegateThreadId != Thread.CurrentThread.ManagedThreadId)
{
Console.WriteLine("Test1:" + Thread.CurrentThread.ManagedThreadId.ToString() + ",func:" + delegateThreadId.ToString());
}
Thread.Sleep(1);
};
}
public void ThreadCore2()
{
msgProcess = this.msgProcess2;
int delegateThreadId = msgProcess(1, "3");
Console.WriteLine("Test2:" + Thread.CurrentThread.ManagedThreadId.ToString() + ",func:" + delegateThreadId.ToString());
while (Program.s_SystemRun)
{
delegateThreadId = msgProcess(1, "2");
if (delegateThreadId != Thread.CurrentThread.ManagedThreadId)
{
Console.WriteLine("Test2:" + Thread.CurrentThread.ManagedThreadId.ToString() + ",func:" + delegateThreadId.ToString());
}
Thread.Sleep(1);
};
}
public int msgProcess1(int param1,string param2)
{
return Thread.CurrentThread.ManagedThreadId;
}
public int msgProcess2(int param1, string param2)
{
return Thread.CurrentThread.ManagedThreadId;
}
}
}