首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#多线程同步事件及等候句柄

2013-10-31 
C#多线程同步事件及等待句柄最近捣鼓了一下多线程的同步问题,发现其实C#关于多线程同步事件处理还是很灵活

C#多线程同步事件及等待句柄

最近捣鼓了一下多线程的同步问题,发现其实C#关于多线程同步事件处理还是很灵活,这里主要写一下,自己测试的一些代码,涉及到了AutoResetEvent 和 ManualResetEvent,当然还有也简要提了一下System.Threading.WaitHandle.WaitOne 、System.Threading.WaitHandle.WaitAny和System.Threading.WaitHandle.WaitAll ,下面我们一最初学者的角度来看,多线程之间的同步。

假设有这样的一个场景,主线程开了一个子线程,让子线程等着,等主线程完成了某件事情时再通知子线程去往下执行,这里关键就在于这个怎让子线程等着,主线程怎通知子线程,一般情况下我们不难想到用一个公共变量,于是咱们就有了下面的代码:

using System;using System.Collections.Generic;using System.Text;using System.Threading;namespace AutoResetEventTest{    class Program    {        const int numIterations = 10;        static AutoResetEvent myResetEvent = new AutoResetEvent(false);        static AutoResetEvent ChangeEvent = new AutoResetEvent(false);        //static ManualResetEvent myResetEvent = new ManualResetEvent(false);        //static ManualResetEvent ChangeEvent = new ManualResetEvent(false);        static int number; //这是关键资源        static void Main()        {            Thread payMoneyThread = new Thread(new ThreadStart(PayMoneyProc));            payMoneyThread.Name = "付钱线程";            Thread getBookThread = new Thread(new ThreadStart(GetBookProc));            getBookThread.Name = "取书线程";            payMoneyThread.Start();            getBookThread.Start();            for (int i = 1; i <= numIterations; i++)            {                Console.WriteLine("买书线程:数量{0}", i);                number = i;                //Signal that a value has been written.                myResetEvent.Set();                //ChangeEvent.Set();                Thread.Sleep(10);            }            payMoneyThread.Abort();            getBookThread.Abort();        }        static void PayMoneyProc()        {            while (true)            {                myResetEvent.WaitOne();                //myResetEvent.Reset();                Console.WriteLine("{0}:数量{1}", Thread.CurrentThread.Name, number);                ChangeEvent.Set();            }        }        static void GetBookProc()        {            while (true)            {                ChangeEvent.WaitOne();                //ChangeEvent.Reset();                               Console.WriteLine("{0}:数量{1}", Thread.CurrentThread.Name, number);                Console.WriteLine("------------------------------------------");                //Thread.Sleep(0);            }        }    }}

本文部分资料来源于网络,特此声明!

相关链接:http://www.cnblogs.com/freshman0216/archive/2008/07/30/1252345.html

http://msdn.microsoft.com/zh-cn/library/z6w25xa6%28VS.80%29.aspx


热点排行