#### 在知乎上看到的，原作者不详。
1. 信号量（Semaphore）  
  信号量就是一个停车场。  
  当前值是停车场里还剩下多少个空车位。  
  最大值是停车场里最多能容纳多少个车位。  
  当汽车进入停车场时，首先要在门口排队(sem_wait)，得到进入许可后才能进入。  
  排队顺序原则上先到先得。  
  每进一辆车，停车场就少了1个停车位，即信号量当前值-1。  
  当前值为0时，停车场停满了，所有车不得进入统统在门口排队等。  
  当一辆车离开后，释放其所占据的停车位(sem_post)，信号量当前值+1  
  信号量值得到释放后，如果门口有正在排队的车，那么就放进来，每放进来一个就重复前面的步骤。
2. 互斥量（Mutex）
  Mutex就是厕所的隔间  
  门开着的时候谁都可以进  
  但是一次只能进一个人  
  进去后就从里面锁上门  
  厕所里有人的时候其他人就要排队等，直到里面的人出来

#### CY老师解释管程。

管程是一个程序结构，结构内多个子程序的工作线程互斥地访问共享资源。比如在Java里，每个对象都可以作为一个管程，以synchronized关键字明确标示需要互斥使用的方法。比如C#也是使用的这种方法。但在C语言里没有类似sync那样的关键字，也没有对procedure的lock/unlock扩展。综上，管程属于语言特性，由编译器提供支持，C语言不支持管程。

管程在现代的OS中并不存在，因为它实现复杂，消耗资源多，效率还不高。

ios系统中的dispatch库是一个强大的队列管理库，dispatch_semaphore_t就是基于dispatch实现的信号量。

POSIX线程（POSIX threads），简称Pthreads，是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统（Unix、Linux、Mac OS X等）中，都使用Pthreads作为操作系统的线程。pthread提供了锁和条件变量机制，分别为pthread_mutex_t和pthread_cond_t及其相关函数。两者结合，可用于实现管程机制。