临界区(critical section)

访问共享资源的一段代码,资源通常是一个变量或数据结构。

竞态条件(race condition)

出现在多个执行线程大致同时进入临界区时,它们都试图更新共享的数据结构,导致了令人惊讶的(也许是不希望的)结果。
因为线程调度算法可以随时在线程之间交换,所以你不知道线程尝试访问共享数据的顺序。 因此,数据变化的结果依赖于线程调度算法。

不确定性(indeterminate)

程序由一个或多个竞态条件组成,程序的输出结果因运行而异,具体取决于哪些线程在何时运行。这导致结果不是确定的(deterministic),而我们通常期望计算机系统给出确定的结果。

互斥(mutual exclusion)

为了解决不确定性,在使用多线程技术的时候应当搭配互斥原语一同使用。这样做可以保证只有一个线程进入临界区,从而避免出现竞态,并产生确定的程序输出。