您的位置:首页 > 编程语言 > C#

C#线程同步的简单代码

2009-01-21 17:26 435 查看
using System;
using System.Collections;
using System.Threading;
public class CRunMain
{
public static void Main()
{
CTestThread objTestThread = new CTestThread(10);
objTestThread.Action();
}
};
public class CTestThread
{
public CTestThread(int nNum)
{
Random objRand = new Random(1000);
int i = 0;

m_lsStr = new ArrayList(nNum);
for (i = 0; i < nNum; i++)
{
m_lsStr.Add(objRand.Next().ToString());
}
m_objThread1 = new Thread(new ThreadStart(Run));
m_objThread2 = new Thread(new ThreadStart(Run));
m_objThread1.Name = "Thread 1";
m_objThread2.Name = "Thread 2";
m_OnNumberClear += new EventHandler(OnNumClear);
}
public void Action()
{
m_objThread1.Start();
m_objThread2.Start();
}
private void Run()
{
string strValue;
while (true)
{
Monitor.Enter(this); //锁定,保持同步

strValue = (string)m_lsStr[0];
m_lsStr.RemoveAt(0);//删除ArrayList中的元素
Console.WriteLine(Thread.CurrentThread.Name + " delete " + strValue);
if (0 == m_lsStr.Count)
{
OnNumClear(this, new EventArgs()); //引发完成事件
}
Monitor.Exit(this); ////取消锁定
Thread.Sleep(0);
}
}
//执行完成之后,停止所有线程
void OnNumClear(object objSend, EventArgs eve)
{
Console.WriteLine("all thread run end...");
m_objThread1.Abort();
m_objThread2.Abort();
}
private Thread m_objThread1;
private Thread m_objThread2;
private ArrayList m_lsStr;
private event EventHandler m_OnNumberClear; //数据删除完成引发的事件
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐