并发通常是指与一个或者多个进程同时发生的过程,通常这也意味着所有这些进程在同一个时间取得进展。并发的代码很难构建,通常需要几个迭代才能,让它按照预期的方式运行。而在并发编程时,都会遇到同样的问题,计算机的科学家已经对共同的问题进行了标记。

竞争条件

当两个或多个操作必须按正确的方式运行, 而程序并未保证这个顺序,就会发生竞争条件。大多数情况下,会出现在数据中,其中一个并发操作尝试读取一个变量,而在某个不确定的时间, 另一个并发操作尝试写入同一个变量。

原子性

当某些东西被认为是原子性,或具有原子性时,这意味着在它运行的环境中,是不可分割或不可中断的。

死锁

死锁程序是所有并发进程彼此等待的程序,在这种情况下,如果没有外界的干预,这个程序将永远无法恢复。

1971年,Edgar Coffman在一篇论文中,列出了出现死锁的4个必要条件:

相互排斥

并发进程同时拥有资源的抢占权。

等待条件

并发进程必须同时拥有一个资源,并等待另外一个资源。

没有抢占

并发进程拥有的资源只能被该进程释放。

循环等待

一个并发进程P1必须等待一系列其他进程P2,这些并发进程同时也在等待进程P1,这样便满足这个条件。