并发:同一个时间段有多个程序在同一个CPU上轮流执行;
并行:同一时间多个程序在不同CPU上同时执行。
并发是在时间段的表象,并行是在时刻的表象。
同步:线程之间具有依赖关系,一个线程的执行依赖于另一个线程的消息。
互斥:对于进程的某一共享资源,同一时刻只允许一个线程访问。
互斥是一种特殊的同步。
实现线程同步的方式有临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(event)。
临界区与互斥量是通过拥有权实现线程控制,只有拥有该对象的线程可以执行,用于线程的互斥控制。信号量与事件通过通知实现线程控制,收到通知的线程可以执行,用于线程的同步控制。
其中,互斥量、信号量、事件为内核对象。
临界区
对某共享资源定义临界区,当一个线程进入临界区后,其他想要访问临界区资源的线程将处于挂起状态,直到当前线程离开临界区,其他线程才可访问。
互斥量
互斥量与临界区相似,只有用户互斥量的线程可以访问资源。区别是:临界区在一个进程中实现资源控制,互斥量可以在不同进程中实现资源安全共享(需在创建互斥量时,对其命名,不同进程根据名称确保访问的是同一个互斥量)。
信号量
信号量是维护0到指定最大值之间的同步对象。计数大于0时有信号,可访问共享资源,计数等于0时无信号,不可访问,需等待直到其他线程释放信号量。
事件
事件包括触发状态和未触发状态,只有事件触发时,该事件对象才会被等到,资源得以访问。等到之后将事件置为未触发状态(或在创建事件对象时,声明等到之后自动置为未触发状态)。资源访问结束后,重新将事件置为触发状态,以便其他线程访问。
参考资料: