欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  Java

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

程序员文章站 2022-04-01 11:43:41
...
  • 信号量

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

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

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

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

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

举例:

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

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

(这里的锁指互斥锁)

区别:

  1. 作用域

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

互斥锁:线程间

  1. 上锁时的执行

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

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

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

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

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

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

相关文章:

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

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

以上就是java - 信号量的概念及锁和信号量之间的相似和不同之处的详细内容,更多请关注其它相关文章!

相关标签: java 信号量