AutoResetEvent执行线程顺序问题

yinhaichao2012 2013-08-05 12:13:04
如下,function3中的set执行完毕后,系统会随机执行function1的.WaitOne()或者function2的.WaitOne() ,如果执行的 是 function1的.WaitOne(),则系统将不会有任何输出,会无限制等待开启信号,如果执行的是 function2的.WaitOne()一切正常,按照执行顺序 function3--->function2-->function1

我想用AutoResetEvent人为的控制线程的执行顺序(ManualResetEvent方法试过可以),该怎么做呢??
static AutoResetEvent mre = new AutoResetEvent(false);
static AutoResetEvent mre1 = new AutoResetEvent(false);
static void Main(string[] args)
{
funDelegate1();
}
static private void funDelegate1()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(function1));
ThreadPool.QueueUserWorkItem(new WaitCallback(function2));
ThreadPool.QueueUserWorkItem(new WaitCallback(function3));
Console.Read();
}
private static void function1(object funParam)
{
mre.WaitOne();
mre1.WaitOne();
StackTrace st = new StackTrace(true);
Console.WriteLine(st.GetFrame(0).GetMethod().Name);
}
private static void function2(object funParam)
{
mre.WaitOne();
mre1.Set();
StackTrace st = new StackTrace(true);
Console.WriteLine(st.GetFrame(0).GetMethod().Name);
}
private static void function3(object funParam)
{
StackTrace st = new StackTrace(true);
Console.WriteLine(st.GetFrame(0).GetMethod().Name);
mre.Set();
}
...全文
94 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
裸奔的蜗牛 2013-08-05
  • 打赏
  • 举报
回复

private static void function1(object funParam)
        {
            mre1.WaitOne();
            StackTrace st = new StackTrace(true);
            Console.WriteLine(st.GetFrame(0).GetMethod().Name);
        }
        private static void function2(object funParam)
        {
            mre.WaitOne();
            StackTrace st = new StackTrace(true);
            Console.WriteLine(st.GetFrame(0).GetMethod().Name);
            mre1.Set();
        }
        private static void function3(object funParam)
        {
            StackTrace st = new StackTrace(true);
            Console.WriteLine(st.GetFrame(0).GetMethod().Name);
            mre.Set();
        } 
yinhaichao2012 2013-08-05
  • 打赏
  • 举报
回复
顶顶啊。。有木有人回答啊
yinhaichao2012 2013-08-05
  • 打赏
  • 举报
回复
引用 1 楼 whd0310 的回复:

private static void function1(object funParam)
        {
            mre1.WaitOne();
            StackTrace st = new StackTrace(true);
            Console.WriteLine(st.GetFrame(0).GetMethod().Name);
        }
        private static void function2(object funParam)
        {
            mre.WaitOne();
            StackTrace st = new StackTrace(true);
            Console.WriteLine(st.GetFrame(0).GetMethod().Name);
            mre1.Set();
        }
        private static void function3(object funParam)
        {
            StackTrace st = new StackTrace(true);
            Console.WriteLine(st.GetFrame(0).GetMethod().Name);
            mre.Set();
        } 
好像不行。。。

110,569

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧