并行计算中的停止stop和跳出break

由于并行计算中的停止stop和跳出 break,跟单线程中有所不同,所以需要重点理解一下.

创新互联建站是专业的临桂网站建设公司,临桂接单;提供网站建设、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行临桂网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

停止stop,因为是多线程,所以当调用stop时,此循环体没有立即退出,还会有一两个线程会继续执行。

所以有可能会达不到我们的要求。

例如:

            List list = new List();

            for (int i = 0; i < 20; i++)

            {

                list.Add(i);

            }

            Console.WriteLine("Stop");

            Parallel.For(0, list.Count,

                (i, LoopState) =>

                {

                    Thread.Sleep(500);

                    Console.WriteLine(i);

                    if (i > 5) LoopState.Stop();

                  //  if (LoopState.IsStopped == false)

                    {

                        Console.WriteLine(" ............." + i);

                    }

                }

                );

执行结果可能如下:

并行计算中的停止stop和跳出 break

当i=6时,调用stop方法,

但直到i=10,循环体才停止。

因此,我们要用LoopState.IsStopped属性来判断是否调用了stop方法,如果调用,则对满足条件下的,才会继续执行。

执行结果如下(为可能结果),符合我们的要求

并行计算中的停止stop和跳出 break

break,跳出当前循环,经过执行结果我们发现,也存在其他线程未跳出循环的情况

所以不能只依靠break了,我们自己要把可以执行的代码放在if代码段中。

Console.WriteLine("Break");

            Parallel.For(0, list.Count,

                (i, LoopState) =>

                {

                    Console.WriteLine(i);

                    Thread.Sleep(500);

                    if (i > 5) LoopState.Break();

                    {

                        Console.WriteLine("----------" + i);

                    }

                }

                );

改为

Console.WriteLine("Break");

            Parallel.For(0, list.Count,

                (i, LoopState) =>

                {

                    Console.WriteLine(i);

                    Thread.Sleep(500);

                    if (i > 5) LoopState.Break();

  else//加上else

                    {

                        Console.WriteLine("----------" + i);

                    }

                }

                );

并行计算中的停止stop和跳出 break

L


标题名称:并行计算中的停止stop和跳出break
本文链接:http://ybzwz.com/article/joejjh.html