临界区(critical section)
竞态条件(race condition)
出现在多个执行线程大致同时进入临界区时,它们都试图更新共享的数据结构,导致了令人惊讶的(也许是不希望的)结果。
因为线程调度算法可以随时在线程之间交换,所以你不知道线程尝试访问共享数据的顺序。 因此,数据变化的结果依赖于线程调度算法。
不确定性(indeterminate)
程序由一个或多个竞态条件组成,程序的输出结果因运行而异,具体取决于哪些线程在何时运行。这导致结果不是确定的(deterministic),而我们通常期望计算机系统给出确定的结果。
互斥(mutual exclusion)
为了解决不确定性,在使用多线程技术的时候应当搭配互斥原语一同使用。这样做可以保证只有一个线程进入临界区,从而避免出现竞态,并产生确定的程序输出。