程序有并发错误?NO WAY!

什么是并发错误

并发是指程序能够交替执行不同的任务,以达到"同时执行效果",加快程序的运行效率。

但是并发也会导致一系列问题,以变量+1赋值为例,由于操作实际由多条指令组成,不同任务执行指令的顺序可能是交错的,所以就可能出现执行结果与我们预期结果不符合的情况。

并发错误很难捕获。这是因为触发并发错误需要线程以特定的顺序并行执行指令,以使程序显示错误行为。此外,触发并发错误具有不确定性。即使在触发并发错误之后,由于非确定性,将其重现并调试也可能很困难。

如果您是.NET开发者,可以尝试使用Coyote来自动检测并发错误。

Coyote

Coyote是由微软研究院提供的一个.NET库,旨在帮助确保您的代码没有并发错误。

Coyote的核心是一个调度器,它在测试期间控制(通过二进制重写)程序的执行,并且能够系统地研究并发性和不确定性,以发现安全性和活跃性缺陷。

更为重要的是,一旦Coyote发现一个错误,一旦 Coyote 发现了一个错误,它就可以让您根据需要多次完全重现它,从而使调试和修复问题变得更加容易。

你可以运行下面的命令安装Coyote:

dotnet tool install --global Microsoft.Coyote.CLI

下面我们用官方示例程序https://github.com/microsoft/coyote-samples来体验一下Coyote的强大功能。

定位错误

首先,clone下代码后,运行下列命令进行编译示例程序代码:

powershell -f build.ps1

运行下列命令进行错误检查:

cd bin\net5.0\coyote rewrite BoundedBuffer.dllcoyote test BoundedBuffer.dll -m TestBoundedBufferMinimalDeadlock --iterations 100

测试完成后,将会提示发现错误,如下图: 

您将得到一个解释所有这些的日志文件:

<ErrorLog> Deadlock detected. Task(0) is waiting for a task to complete, 
but no other controlled tasks are enabled. 
Task(1), Task(2) and Task(3) are waiting to acquire a resource that is already acquired, 
but no other controlled tasks are enabled.
<StackTrace>    at Microsoft.Coyote.Tasks.SynchronizedBlock.Mock.Wait()at BoundedBufferExample.BoundedBuffer.Take()

解决问题

通过错误日志的StackTrace,定位到出错代码:

while (this.Occupied == 0)
{Monitor.Wait(this.SyncObject);
}

然后看看释放SyncObject的代码:

 Monitor.Pulse(this.SyncObject);

根据错误日志的ErrorLog,并对照官方文档的解释,只需要把Pulse替换成PulseAll即可解决问题:


结论

通过上面的示例,我们可以看到,未对代码做任何修改,就可以实现并发错误检测。

如果您对项目中的多线程代码不太放心,可以尝试使用Coyote来帮助检测,避免上线出现并发错误的可能性。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

好好珍惜今生,不要期待来世……

亲情经不起冷漠&#xff0c;爱情经不起谎言&#xff0c;友情经不起虚伪。再好的缘份也经不起敷衍&#xff0c;再深的感情也需要珍惜。没有绝对的傻瓜&#xff0c;只有愿为你装傻的人&#xff0c;原谅你的人&#xff0c;是不愿失去你的世界。一辈子真的好短好短…… 有多少人说好…

图像柔光效果(SoftGlow)的原理及其实现。

图像柔光效果在很多商业软件中都有实现&#xff0c;比如美图秀秀&#xff0c;光影魔术手等。其能针对原始图像产生一副新的比较平滑感觉光线比较柔和的效果&#xff0c;给人一种朦胧美&#xff0c;如下面几幅图所示&#xff1a; 目前&#xff0c;关于该算法的可控参数&#xff…

中小学招生强化就近入学;首次全女性太空行走取消;苹果付费新闻APP奔溃;NASA火星上发现鹅卵石;这就是今天的大新闻...

今天是3月27日农历二月廿一今天星期三有点闷已经开始用空调了下面是今天的大新闻中小学招生强化就近入学&#xff08;北京商报&#xff09;中小学秋季入学新生招生已经陆续开始&#xff0c;近日&#xff0c;教育部办公厅也紧随其后&#xff0c;印发了《关于做好2019年普通中小学…

python如何安装扩展库openpyxl和numpy_Python第三方库之openpyxl(2)

Python第三方库之openpyxl(2)简单的使用写一个工作簿>>> from openpyxl importWorkbook>>> from openpyxl.compat importrange>>> from openpyxl.utils importget_column_letter>>>>>> wb Workbook()>>>>>> de…

[翻译]在GC上加入DPAD

本文90%通过机器翻译&#xff0c;另外10%译者按照自己的理解进行翻译&#xff0c;和原文相比有所删减&#xff0c;可能与原文并不是一一对应&#xff0c;但是意思基本一致。译者水平有限&#xff0c;如果错漏欢迎批评指正译者Bing Translator、InCerry&#xff0c;另外感谢Hex、…

美国Thinkfun的“编程三剑客”少儿编程从入门到精通

▲数据汪特别推荐点击上图进入玩酷屋学编程现在有多火&#xff0c;小木就不多说啦&#xff01;很多爸爸妈妈都想让小朋友早点接触编程&#xff0c;掌握这门未来世界的通用“语言”&#xff0c;但又怕太早使用电脑、iPad等电子产品&#xff0c;影响孩子视力。今天给大家推荐一套…

解决scrollViewDidScroll do not work的方法

2019独角兽企业重金招聘Python工程师标准>>> 别忘记在在包含了scrollView的ViewController中的viewDidload方法中设置scrollView的delegate [self.scrollView setDelegate:self]; 关于delegate&#xff1a;一般一个ui的delegate都在其父类中指定 view.delegateself…

基于ABP落地领域驱动设计-05.实体创建和更新最佳实践

围绕DDD和ABP Framework两个核心技术&#xff0c;后面还会陆续发布核心构件实现、综合案例实现系列文章&#xff0c;敬请关注&#xff01; ABP Framework 研习社&#xff08;QQ群&#xff1a;726299208&#xff09; ABP Framework 学习及实施DDD经验分享&#xff1b;示例源码、…

mysql isam 食物_MySQL常用存储引擎之MyISAM

1. mysql 5.5之前版本默认存储引擎1.1 因为这个原因现在还有大量服务器在使用这myisam引擎的表1.2 myisam是mysql大部分系统表和临时表使用的存储引擎2. myisam存储引擎表由myd和myi组成2.1 myd存储数据信息2.2 myi存储索引信息2.3 frm记录表结构的&#xff0c;所有存储引擎都有…

每日一笑 | 史上最贴心的骗子

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图源网络&#xff0c;侵权删&#xff09;

基于ABP落地领域驱动设计-06.正确区分领域逻辑和应用逻辑

系列文章基于ABP落地领域驱动设计-01.全景图基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则基于ABP落地领域驱动设计-03.仓储和规约最佳实践和原则基于ABP落地领域驱动设计-04.领域服务和应用服务的最佳实践和原则基于ABP落地领域驱动设计-05.实体创建和更新最佳实践…

基于ABP落地领域驱动设计-03.仓储和规约最佳实践和原则

dotNET兄弟会 专注.Net开源技术及跨平台开发&#xff01;致力于构建完善的.Net开放技术文库&#xff01;为.Net爱好者提供学习交流家园&#xff01;公众号 围绕DDD和ABP Framework两个核心技术&#xff0c;后面还会陆续发布核心构件实现、综合案例实现系列文章&#xff0c;敬请…

我国最新十大黑科技发布,颠覆你的想象!

全世界只有3.14 % 的人关注了数据与算法之美人工智能的飞速发展&#xff0c;让“黑科技”一词深入人心。目不暇接的各种前沿技术&#xff0c;一再刷新人们的认知世界。所谓“黑科技”&#xff0c;不仅仅要够炫酷&#xff0c;更要有足够的“生活温度”&#xff0c;实现真正的人性…

基于ABP落地领域驱动设计-04.领域服务和应用服务的最佳实践和原则

围绕DDD和ABP Framework两个核心技术&#xff0c;后面还会陆续发布核心构件实现、综合案例实现系列文章&#xff0c;敬请关注&#xff01; ABP Framework 研习社&#xff08;QQ群&#xff1a;726299208&#xff09; ABP Framework 学习及实施DDD经验分享&#xff1b;示例源码、…

嗓子痛引发大抢救!33岁程序员的垂死经历,为所有人敲响警钟!

全世界只有3.14 % 的人关注了数据与算法之美最近广州天气多变&#xff0c;再加上不规律的饮食、作息&#xff0c;数据汪的扁桃体已经肿痛两三天了。在一大杯“凉茶”下肚后&#xff0c;最终我还是选择去医院做一次检查。万幸的是&#xff0c;检查结果出来后&#xff0c;医生说只…

.NET也内卷了,BAT大厂近日上演抢人大战!

这两年到处都流行“内卷”这个词&#xff0c;而IT互联网行业则是内卷重灾区。还不太明白什么是内卷&#xff1f;看看这个段子&#xff1a;关于内卷&#xff0c;网上有个比喻&#xff0c;说如果葵花宝典被公开了&#xff0c;就会变成一个灾难。因为如果只有一个人拥有的话&#…

EFDC水模型 初学者入门 及软件下载学习指导

EFDC模型有三个不同的版本&#xff0c;它们分别代表了计算机不同的操作菜单和功能。其中的两个版本功能齐全&#xff0c;包括了EFDC 所有的产品版本。另外一个是简化版&#xff0c;涵盖了水动力学&#xff08;包括盐度和温度的影响&#xff09;&#xff0c;毒物&#xff0c;沉积…

每日一笑 | 在地铁上被老奶奶让座是一种什么样的体验?

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图源网络&#xff0c;侵权删&#xff09;

java access dbq_Java-Access汇总

http://www.doczj.com/doc/3b7b55100b4e767f5acfce38.html/view/d1c01b43a8956bec0975e33e.html在网上看了一些资料&#xff0c;基本上都是一样的。怎么试也行不通。于是我怀疑为什么那些错误的技术文章如此大张旗鼓的到处都是。今天有人问我如果把主机托管出去&#xff0c;也就…

一个IT人的非典型职场十年 (5)

2019独角兽企业重金招聘Python工程师标准>>> 对于非资深IT人来讲&#xff0c;IT咨询(IT Consulting)显得是比较高帅富一些&#xff0c;各种衣着光鲜的咨询报告&#xff0c;各种西装革履的顾问。 这先随便说两句什么是IT咨询&#xff0c;IT顾问究竟是在做啥工作。 I…