文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
线程不安全
线程最大的优点在于很多不同任务可以同时运行,并访问相同数据,而不同任务可以访问相同数据恰恰也是线程的缺点……
不像第一个程序,第二个程序的线程读取并修改了存储器中的共享数据:
beers 变量。这有什么问题吗?好,我们来看一下当两个线程试图用以下代码减小 beers 值时会发生什么:
首先,两个线程都需要读取当前 beers 变量的值。
接着每个线程都将数字减 1。
最后每个线程都将 beers-1 这个值写回 beers 变量。
两个线程都想把
beers 值减 1,却没有成功。两个线程只把 beers 值减去了 1,而不是 2,这就是为什么 beers 变量没有减到 0,因为线程之间会相互影响。
为什么结果是不可预测的呢?因为线程每次运行这行代码的顺序都不一样。线程有时不会撞车,有时则会撞得车毁人亡。小心提防那些非线程安全的代码。怎么才能知道一段代码是否线程安全呢?通常当两个线程读写相同变量时,代码就是非线程安全的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论