要写多线程代码,就不可避免的需要了解线程间的同步机制。多线程同步机制大概率的目的 : 线程执行的过程中控制某段代码或某个资源同一时间只允许一个线程进入或操作。
常用的同步方式有:
- 临界区(Critical Section):通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。
- 互斥量(Mutex):采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享
- 信号量(Semaphore):它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目
- 事 件(Event): 通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作
不同系统,不同库对这些的实现是不同的。