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; //数据删除完成引发的事件 };
相关文章推荐
- C#使用读写锁三行代码简单解决多线程并发写入文件时线程同步的问题
- C#使用读写锁三行代码简单解决多线程并发写入文件时线程同步的问题
- C#使用读写锁三行代码简单解决多线程并发写入文件时线程同步的问题
- C#使用互斥量(Mutex)实现多进程并发操作时多进程间线程同步操作(进程同步)的简单示例代码及使用方法
- C#内容分页简单实现代码及详解
- 一个非常简单的Oracle存储过程,及其在C#.net中的执行的代码
- C# 一个简单分词程序的思路和代码(四) 键树 查询记录
- C#摄像头实现拍照功能的简单代码示例
- C# 简单生成双色球代码
- 使 WebBrowser 更简单的新加和执行 js, 可安装 jQuery 脚本的 C# 开源代码 - IEBrowser [1]
- 在C#代码中应用Log4Net(一)简单使用Log4Net
- C#简单嵌套flash读取数据的实现代码
- 例题:计算运费。c#语言基础,比较简单。看代码输入格式和方法。同样方法可以做一个 出租车打车的程序
- 在C#代码中应用Log4Net(一)简单使用Log4Net
- 爬虫技术(四)-- 简单爬虫抓取示例(附c#代码)
- C# 窗体传值的方法,通过委托来传值,代码相当简单。 - .NET技术 / C#
- 简单代码实现C#中运行另外一个程序
- 贴下百度博客自动加好友的简单代码示例!!(c#.net实现)
- 最简单设置Mdi容器背景图片方法-不用写一行代码(c#)
- 一段简单的打印代码(c#)