竞态条件

当软件 程序依赖一个或多个 进程的时序才能正常运行时,就会发生竞态条件。如果某个 线程在出乎意料的时间运行或结束,可能会导致不可预测的行为,例如输出错误或程序 死锁

大多数软件程序都是 多线程的,这意味着它们可以同时处理多个线程。编写良好的 应用程序会确保按照预期的顺序处理每个线程的结果。如果程序依赖以不可预测的顺序运行的线程,就可能发生竞态条件。

一个简单的例子是处理 布尔值的 逻辑门。AND 逻辑门有两个 输入和一个 输出。如果输入 A 和 B 为真,AND 门会生成 TRUE。如果一个或两个输入为假,它会生成 FALSE。如果程序在变量 A 和 B 加载之前检查逻辑门的结果,就可能发生竞态条件。正确的处理顺序应为:

  1. 加载变量 A
  2. 加载变量 B
  3. 检查 AND 逻辑门的结果

错误的顺序是:

  1. 加载变量 A
  2. 检查 AND 逻辑门的结果
  3. 加载变量 B

上面第二个例子的结果可能与第一个例子相同,也可能不同。例如,变量 B 在加载前后都可能为 FALSE,这样就不会改变结果。如果 A 为 FALSE,那么无论 B 为 TRUE 还是 FALSE,都没有关系。但是,如果 A 和 B 都为真,结果应为 TRUE。在检查逻辑门的结果后再加载变量 B,会产生错误的 FALSE 结果。

竞态条件产生的不一致输出可能导致难以检测的 错误。程序员可以通过确保按一致的顺序处理线程来避免这些问题。

更新日期 January 24, 2020 作者 Per C.

quiz测试你的知识

The GNU General Public License is designed for what type of software?

A
Free software
0%
B
Commercial software
0%
C
Proprietary software
0%
D
Cloud-based software
0%
Correct! Incorrect!     View the GNU definition.
More Quizzes →

Tech Terms 计算机词典

本页中竞态条件的定义是由 TechTerms.com 的作者撰写的原创定义。如果您想引用本页或引用此定义,请使用定义正下方的绿色引用栏。

我们的目标是以简单易懂的方式解释计算机术语。我们努力使发布的每个定义都做到准确和简明。如果您对本定义有任何反馈,或想建议一个新的技术术语,请联系我们

Tech Terms 通讯

通过我们的每日或每周通讯提升您的技术知识!立即订阅,即可将新术语和测验发送到您的收件箱。

订阅免费的 TechTerms 通讯

您希望多久收到一封电子邮件?

您可以随时使用每封邮件中的链接取消订阅或更改接收频率。 有疑问?请联系我们

注意:通讯以英文发送。