• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

探究Visual Studio 2010中Parallel的使用(3)

发布: 2010-3-25 11:26 | 作者: 不详 | 来源: 领测软件测试网采编 | 查看: 19次 | 进入软件测试论坛讨论

领测软件测试网

  探究Visual Studio 2010中Parallel的使用(3)  软件测试

  并行任务之间的同步

  有时候我们在处理并行任务的时候,各个任务之间需要同步,也就是同时执行的并行任务,需要在共同到达某一个状态的后再一共继续执行。我们可以举一个现实生活中的例子。陈良乔,贾玮和单春晖是好朋友,他们相约到电影院看《建国大业》。他们三个住在不同的地方,为了能一起买票进电影院,他们约好先在电影院门口的KFC会合,然后再一起进电影院。这其中就涉及到一个同步的问题:他们需要先在KFC会合。他们是从家里分别到KFC的,但是需要在KFC进行同步,等到三个人都到齐后在完成后后继的动作,进电影院看电影。

  为了完成并行任务之间的同步,.NET Framework中提供了一个类Barrier。顾名思义,Barrier就像一个关卡或者是剪票口一样,通过Barrier类,我们可以管理并行任务的执行,完成他们之间的同步。Barrier类的使用非常简单,我们只需要在主线程中声明一个Barrier对象,同时指明需要同步的任务数。然后,在需要进行同步的地方调用Barrier类的SignalAndWait函数就可以了。 当一个并行任务到达SignalAndWait后,它会暂停执行,等待所有并行任务都到达同步点之后再继续往下执行。下面我们以一个实际的例子,来看看如何利用Barrier类完成看电影的同步问题。

  using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ParallelBarrier { class Program { // 用于同步的Barrier对象 static Barrier sync; static void Main(string[] args) { // 创建Barrier对象,这里我们需要同步 // 任务有三个 sync = new Barrier(3); // 开始执行并行任务 var steps = new Action[] { () => gotothecinema("陈良乔", TimeSpan.FromSeconds(5) ), () => gotothecinema("贾玮", TimeSpan.FromSeconds(2) ), () => gotothecinema("单春晖", TimeSpan.FromSeconds(4) )}; Parallel.Invoke(steps); Console.ReadKey(); } // 任务 static void gotothecinema(string strName, TimeSpan timeToKFC ) { Console.WriteLine("[{0}] 从家里出发。", strName); // 从家里到KFC Thread.Sleep(timeToKFC); Console.WriteLine("[{0}] 到达KFC。", strName); // 等待其他人到达 sync.SignalAndWait(); // 同步后,进行后继动作 Console.WriteLine("[{0}] 买票进电影院。", strName); } } }

  在这段代码中,我们首先创建了Barrier对象,因为在这里需要同步的任务有三个,所以创建Barrier对象时是的参数是3。然后就是使用Parallel.Invoke执行并行任务。我们在并行任务gotothecinema中设置了一个同步点,在这里我们调用Barrier对象的SignalAndWait函数,它表示当前任务已经到达同步点并同时等待其他任务到达同步点。当所有任务都到达同步点之后,再继续往下执行。运行上面的程序,我们可以获得这样的输出:

图2 使用Barrier进行同步

  图2 使用Barrier进行同步

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: Parallel studio Studio visual Visual 探究


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网