线程间同步
同步和通信的区别
线程间同步用于控制多个线程按照一定的顺序访问资源。
线程间通信用于进程间传输信息,线程同步是一种进程通信的表现形式,通过修改信号量,线程之间可相互协调运行和协同工作。
线程间同步机制
线程间同步有互斥量、信号量、管程等几种方式,在介绍线程间同步之前,首先要介绍一下临界区的概念:临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段。在任意时刻只允许一个线程对临界区进行访问,如果有多个线程试图访问临界区,那么在有一个线程进入后,其他试图访问临界区的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。临界区只能用于在同一进程里线程间的互斥访问。
互斥量
只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥量比临界区复杂,互斥量不仅仅能够在同一进程的不同线程间实现资源的安全共享,而且可以在不同进程的线程间实现对资源的安全共享。
信号量
信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源,但是需要限制在同一时刻访问此资源的最大线程数目。这与操作系统中的PV操作相同。
- P操作:使信号量减1,若信号量大于等于0,则该进程继续执行,否则排入等待队列。
- V操作:使信号量加1,若信号量大于0 ,唤醒等待队列中的一个进程。
锁(互斥量)和信号量的区别
- 互斥量用于线程的互斥,互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性,但互斥无法限制访问者对资源的访问顺序,即访问是无序的。


1009

被折叠的 条评论
为什么被折叠?



