Begininvoke执行顺序的有关问题
Begininvoke执行顺序的问题
多线程,如果以下这句话是在子线程里执行的,而go是public static变量的话,
public static int go = 0;
主线程{ 调用子线程 }
子线程{
//A语句
this.BeginInvoke(new Action(() =>
{
Go ++; //B语句
}));
//C语句
执行顺序是ABC还是ACB
}
我的问题,在子线程里执行顺序是ACB还是ABC ???
------解决思路----------------------
答案是不一定的 begininvoke 是等调用线程空闲的时候 才会去调用他

上面是一种情况 很直接 但是 下面的情况

上面两段代码 运行效果 完全不一样
在第一段代码中 都是在Console 所以没有空余时间 直到线程完毕后 begininvoke 才有空余时间 所以一次性全部打印出来了
而第二段代码中有了 sleep 所以 当sleep的时候 线程就有空闲时间了 所以 begininvoke 得以有机会执行
所以 答案是不确定的 得看你的 A 和 C 是什么样子的语句
如果你的 A 和 C 都是很占用cpu时间的 那么 begininvoke 就很难有机会去执行 或者说等cpu切换时间片的时候 就有机会去执行
如果你的 A 和 C 是不怎么占用 cpu 时间的 那么 它就有可能会有机会去执行
多线程,如果以下这句话是在子线程里执行的,而go是public static变量的话,
public static int go = 0;
主线程{ 调用子线程 }
子线程{
//A语句
this.BeginInvoke(new Action(() =>
{
Go ++; //B语句
}));
//C语句
执行顺序是ABC还是ACB
}
我的问题,在子线程里执行顺序是ACB还是ABC ???
------解决思路----------------------
答案是不一定的 begininvoke 是等调用线程空闲的时候 才会去调用他
上面是一种情况 很直接 但是 下面的情况
上面两段代码 运行效果 完全不一样
在第一段代码中 都是在Console 所以没有空余时间 直到线程完毕后 begininvoke 才有空余时间 所以一次性全部打印出来了
而第二段代码中有了 sleep 所以 当sleep的时候 线程就有空闲时间了 所以 begininvoke 得以有机会执行
所以 答案是不确定的 得看你的 A 和 C 是什么样子的语句
如果你的 A 和 C 都是很占用cpu时间的 那么 begininvoke 就很难有机会去执行 或者说等cpu切换时间片的时候 就有机会去执行
如果你的 A 和 C 是不怎么占用 cpu 时间的 那么 它就有可能会有机会去执行