首页 >Java >java教程 >java - 信号量的概念及锁和信号量之间的相似和不同之处

java - 信号量的概念及锁和信号量之间的相似和不同之处

php是最好的语言
php是最好的语言原创
2018-08-06 16:32:024395浏览

  • 信号量

目的:可以使用信号量来限制访问一个共享资源的线程数

含义:信号量指对共同资源进行访问控制的对象。在访问资源之前,线程必须从信号量获取许可,在访问完资源之后,这个线程必须将许可返回给信号量。一旦获得许可,信号量中可用许可的总数减1,一旦许可被释放,信号量中许可数加1.

                            1.png

                                      1.png

 只有一个许可的信号量可用来模拟一个相互排斥的锁。

举例:

                                 1.png

锁和信号量之间的相似之处和不同之处?

(这里的锁指互斥锁)

区别:

  1. 作用域

信号量:进程间或者线程间

互斥锁:线程间

  1. 上锁时的执行

信号量:如果信号量的value > 0;那么其他的线程可以执行任务。并且成功执行后,value--;如果value=0,那么线程sem_wait 使得线程阻塞,直到sem_post被释放后value++,其他的线程才可以根据value执行。

互斥锁:只有一个对象被上了锁(加锁),那么其他任何线程都不可访问被加锁的对象。

  1. 一个是同步一个是互斥

信号量:用在多线程多任务的同步的,一个线程完成了某个动作就通过信号量告诉别的线程,别的线程在进行某些动作。

互斥锁:用在多线程多任务互斥的。一个线程占用了某个资源后,那么别的线程就无法访问,直到这个线程unlock,其他线程才可以利用。

也就是说,信号量不一定是锁定某一个资源,而是流程上的概念,比如:有A,B两个线程,B线程要等A线程完成某一任务以后再进行自己下面的步骤,这个任务并不一定是锁定某一资源,还可以是进行一些计算或者数据处理之类。而线程互斥量则是“锁住某一资源”的概念,在锁定期间内,其他线程无法对被保护的数据进行操作。在有些情况下两者可以互换

相关文章:

Java中互斥锁信号量与多线程等待机制的示例

PHP信号量基本用法实例详解

以上是java - 信号量的概念及锁和信号量之间的相似和不同之处的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn