多线程(3)临界区,互斥量和信号量的区别

1. 什么是临界资源,临界区?

临界资源
多线程之间可能需要互斥的访问一些全局变量,这就需要互斥的来访问,这些需要共享访问的字段被称作是 临界资源

临界区
就是访问临界资源的那一段代码称作临界区

2. 什么是互斥量?

互斥量是一个内核对象。
互斥量用来确保一个线程独占一个资源的访问。
互斥量与临界区非常相似,并且互斥量可以用于不同进程中的线程互斥访问。

3. 什么是信号量?

信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。
信号量:用于多线程间的同步!

4. 临界区,互斥量和信号量使用范围

信号量:可以被任何进程,任何线程获取和释放
互斥量:不限进程,但是哪个线程获取,哪个线程释放
临界区:仅限于本进程使用

5. 互斥量和信号量的区别

5.1 互斥量用于线程的互斥,信号量用于线程的同步

这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。

5.2 互斥量值只能为0或1,信号量值可以为非负整数。

  1. 也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。

  2. 信号量可以实现多个同类资源的多线程互斥和同步。
    当信号量为单值信号量是,也可以完成一个资源的互斥访问。

  3. 互斥量的加锁和解锁必须由同一线程分别对应使用,
    信号量可以由一个线程释放,另一个线程得到。

发布了142 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/lqy971966/article/details/104527881