多线程(3)临界区,互斥量和信号量的区别
1. 什么是临界资源,临界区?
临界资源
多线程之间可能需要互斥的访问一些全局变量,这就需要互斥的来访问,这些需要共享访问的字段被称作是 临界资源
临界区
就是访问临界资源的那一段代码称作临界区
2. 什么是互斥量?
互斥量是一个内核对象。
互斥量用来确保一个线程独占一个资源的访问。
互斥量与临界区非常相似,并且互斥量可以用于不同进程中的线程互斥访问。
3. 什么是信号量?
信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。
信号量:用于多线程间的同步!
4. 临界区,互斥量和信号量使用范围
信号量:可以被任何进程,任何线程获取和释放
互斥量:不限进程,但是哪个线程获取,哪个线程释放
临界区:仅限于本进程使用
5. 互斥量和信号量的区别
5.1 互斥量用于线程的互斥,信号量用于线程的同步
这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。
5.2 互斥量值只能为0或1,信号量值可以为非负整数。
-
也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。
-
信号量可以实现多个同类资源的多线程互斥和同步。
当信号量为单值信号量是,也可以完成一个资源的互斥访问。 -
互斥量的加锁和解锁必须由同一线程分别对应使用,
信号量可以由一个线程释放,另一个线程得到。