Parallel线程安全问题
废话不多说,上代码:
猜一下,运行结果是多少,是999999?抱歉不是的,结果!= 999999。 Net 4.0引入了System.Threading.Tasks,简化了我们进行异步编程的方式,而不用直接与线程和线程池打交道,但这也引入了线程安全问题。 System.Threading.Tasks中的类型被称为任务并行库(TPL)。TPL使用CLR线程池(说明使用TPL创建的线程都是后台线程)自动将应用程序的工作动态分配到可用的CPU中。 其中Parallel是指数据并行,其提供的Parallel.For()或Parallel.ForEach()方法,可以以并行方式对数组或集合中的数据进行迭代。 那之所以出现这个结果,很显然了,是多线程操作集合导致的线程安全问题。 总之,多线程操作集合时一定要注意线程安全的问题,不管是通过Thread、ThreadPool、Task、Parallel还是PLINQ。 解决方案很简单:
对于这个问题,我知道其存在潜在的线程安全问题,但是不确定其导致的结果如何?当我截图到处询问无果时,才想到自己动手写demo去验证问题。这也是我写这篇文章的初衷:提醒自己,遇到问题,不要凭空猜测,要有动手验证的决心。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 找不到与名为’help’的控制器匹配的类型
- 这是一个错误吗?或者它是ASP.NET 4(或MVC 2)中的设置?
- ASP如何将table导出EXCEL表格
- asp-classic – ASP会话变量:是否与IsEmpty相同?
- asp.net – 使用标记将字典绑定到转发器
- 如何在asp.Net中的脚本标签上使用runat =“server”
- asp.net-mvc-3 – 我可以将PartialViewResult与PagedList一
- 与asp.net mvc的dotnetopenauth证明太沮丧使用
- 初识ABP vNext(4):vue用户登录&菜单权限
- ASP.NET Core托管和部署Linux实操演练手册
- asp.net-mvc – 在ASP.NET MVC中使用域对象和视图
- asp.net-mvc-3 – 我的路由如何使用ASP MVC3在UR
- asp.net-mvc – 为什么我的会话变量在构建Contro
- asp.net-mvc – 我可以从MVC中的View访问Resourc
- asp.net-mvc – UIHint属性在MVC中
- asp.net – 可以添加一个String.contains多个值吗
- asp.net – Visual Studio需要Windows 7中提升的
- asp.net – 如何使用Eval更改TemplateField中的颜
- 从IIS上的ASP.NET Core应用程序请求超时
- asp.net 文章分页显示实现代码