• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

多线程入门(1),volatile(C#)关键字

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

     多线程应用程序,可以提高程序的响应速度,也就提高了用户的体验。在多用户或者有耗时操作时,使用多线程提高程序的响应速度是不二的选择。一个程序员不懂多线程,不是一个合格的程序员。所以,哥也要学习多线程了。

构建一个简单的多线程程序

1using System;
2using System.Threading;
3
4namespace CSharpConsoleTestingCodes
5

       以上就是一个简单的多线程程序。由于注释比较详细就不一一讲解了。

执行结果如图(结果不会完全一样,因为线程切换的时间和顺序是不定的):





不过有几点是要注意的:

  • 创建线程时使用的代码为 Thread td = new Thread(worker.DoWork);  而不是DoWork(),初学者容易写为  new Thread(worker.DoWork()); 这是因为在Thread的构造函数中使用的是ThreadStart类型的委托,可以理解为C中的函数指针,传递给线程执行。 以后我们会发现,多线程中委托是很重要的角色。
  • Worker类中的mShouldStop数据成员被声明为了 volatile ,因为这个变量同时被主线程和辅助线程访问和修改。以下是MSDN上的解释:

    volatile 关键字用于通知编译器,将有多个线程访问 mShouldStop 数据成员,因此它不应当对此成员的状态做任何优化假设。有关更多信息,请参见 volatile(C# 参考)

    通过将 volatilemShouldStop 数据成员一起使用,可以从多个线程安全地访问此成员,而不需要使用正式的线程同步技术,但这仅仅是因为 mShouldStop bool。这意味着只需要执行单个原子操作就能修改 mShouldStop 。但是,如果此数据成员是类、结构或数组,那么,从多个线程访问它可能会导致间歇的数据损坏。假设有一个更改数组中的值的线程。Windows 定期中断线程,以便允许其他线程执行,因此线程会在分配某些数组元素之后和分配其他元素之前被中断。这意味着,数组现在有了一个程序员从不想要的状态,因此,读取此数组的另一个线程可能会失败。

  • 最后使用Join()方法结束辅助线程。以下是MSDN上的解释:

    还可以通过调用 Abort 来从一个线程终止另一个线程,但这会强行终止受影响的线程,而不管它是否已完成自己的任务,并且不提供清理资源的机会。此示例中显示的技术是首选方法。

    最后,Main 函数对辅助线程对象调用 Join 方法。此方法导致当前线程阻塞或等待,直到对象所表示的线程终止。因此,直到辅助线程返回后,Join 才会返回,然后自行终止


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ArcGISGP调用Intersect的参数传入方法C#发布时间:2022-07-10
下一篇:
C#生成不重复随机数的方法发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap