一、进程互斥由于进程具有独立性和异步性等并发特征计算机的资源有限导致了进程之间的资源竞争和共享也导致了对进程执行过程的制约。1、临界资源和临界区临界部分临界资源一次只能供一个进程访问的资源。临界区把不允许多个并发进程交叉执行的一段程序称为临界区critical region或临界部分critical section。临界区是由属于不同并发进程的程序段共享公用数据或公用数据变量而引起的临界区不可能用增加硬件的方法来解决。因此临界区也可以被称为访问公用数据的那段程序。当一个进程使用该临界资源时其他需要访问该资源的进程必须阻塞直到占用者释放该资源。2、间接制约把这种由于共享某一公有资源而引起的在临界区内不允许并发进程交叉执行的现象称为由共享公有资源而造成的对并发进程执行速度的间接制约。这里的“间接”二字主要是指各并发进程的速度受公有资源的制约而非进程之间的直接制约。3、互斥互斥一组并发进程中的一个或多个程序段因共享某一公有资源而导致它们必须以一个不允许交叉执行的单位执行。也就是说不允许两个以上的共享该资源的并发进程同时进入临界区。一般情况下作为程序段的一个过程不允许多个进程同时访问它。但如果该过程是纯过程则各并发进程可以同时访问它。纯过程是指在执行过程中不改变过程自身代码的一类过程。进程同步方法1、临界区Critical Section:通过对多线程的串行化来访问公共资源或一段代码速度快适合控制数据访问。优点保证在某一时刻只有一个线程能访问数据的简便办法缺点虽然临界区同步速度很快但却只能用来同步本进程内的线程而不可用来同步多个进程中的线程。2、互斥量Mutex:为协调共同对一个共享资源的单独访问而设计的。互斥量跟临界区很相似比临界区复杂互斥对象只有一个只有拥有互斥对象的线程才具有访问资源的权限。优点使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享而且可以在不同应用程序的线程之间实现对资源的安全共享。缺点①互斥量是可以命名的也就是说它可以跨越进程使用所以创建互斥量需要的资源更多所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建就可以通过名字打开它。通过互斥量可以指定资源被独占的方式使用但如果有下面一种情况通过互斥量就无法处理比如现在一位用户购买了一份三个并发访问许可的数据库系统可以根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作这时候如果利用互斥量就没有办法完成这个要求信号量对象可以说是一种资源计数器。3、信号量Semaphore:为控制一个具有有限数量用户资源而设计。它允许多个线程在同一时刻访问同一资源但是需要限制在同一时刻访问此资源的最大线程数目。互斥量是信号量的一种特殊情况当信号量的最大资源数1就是互斥量了。优点适用于对Socket套接字程序中线程的同步。例如网络上的HTTP服务器要对同一时间内访问同一页面的用户数加以限制只有不大于设定的最大用户数目的线程能够进行访问而其他的访问企图则被挂起只有在有用户退出对此页面的访问后才有可能进入。缺点①信号量机制必须有公共内存不能用于分布式操作系统这是它最大的弱点②信号量机制功能强大但使用时对信号量的操作分散 而且难以控制读写和维护都很困难加重了程序员的编码负担③核心操作P-V分散在各用户程序的代码中不易控制和管理一旦错误后果严重且不易发现和纠正。4、事件Event: 用来通知线程有一些事件已发生从而启动后继任务的开始。优点事件对象通过通知操作的方式来保持线程的同步并且可以实现不同进程中的线程同步操作。