多线程编程中同步数据一直是开发者需要注意的地方,今天主要谈谈AutoResetEvent,调用set事件后会不会阻塞主线程(调用线程),测试代码如下,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace CSharpTest1
{
class Program
{
static Thread t1;
static AutoResetEvent evt = new AutoResetEvent(false);
static void Main(string[] args)
{
t1 = new Thread(new ThreadStart(thFunction));
t1.IsBackground = true;
t1.Start();
while (true)
{
Console.WriteLine("Main function running...");
evt.Set();//唤醒阻塞的线程
Console.WriteLine("after send signal");
Thread.Sleep(100);
Console.WriteLine("after sleep");
}
}
static void thFunction()
{
while (true)
{
evt.WaitOne();//运行到此处该线程阻塞,等待evt.Set()之后继续执行
Console.WriteLine("thTunction receive signal..");
Thread.Sleep(1000);//为了测试是否阻塞主线程加了长延时
}
}
}
}
运行结果如图
从运行结果看不会阻塞主线程。