返回介绍

线程不安全

发布于 2024-10-10 23:21:40 字数 942 浏览 0 评论 0 收藏 0

线程最大的优点在于很多不同任务可以同时运行,并访问相同数据,而不同任务可以访问相同数据恰恰也是线程的缺点……

不像第一个程序,第二个程序的线程读取并修改了存储器中的共享数据:

beers 变量。这有什么问题吗?好,我们来看一下当两个线程试图用以下代码减小 beers 值时会发生什么:

首先,两个线程都需要读取当前 beers 变量的值。

接着每个线程都将数字减 1。

最后每个线程都将 beers-1 这个值写回 beers 变量。

两个线程都想把

beers 值减 1,却没有成功。两个线程只把 beers 值减去了 1,而不是 2,这就是为什么 beers 变量没有减到 0,因为线程之间会相互影响。

为什么结果是不可预测的呢?因为线程每次运行这行代码的顺序都不一样。线程有时不会撞车,有时则会撞得车毁人亡。小心提防那些非线程安全的代码。怎么才能知道一段代码是否线程安全呢?通常当两个线程读写相同变量时,代码就是非线程安全的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文