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

信号量

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

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

21922ee61e7327a2b1e5c47c91d14d51.png

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

举例:

274d662aeeba2a40171671fbf509b90b.png

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

(这里的锁指互斥锁)

区别:作用域

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

互斥锁:线程间上锁时的执行

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

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

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

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

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

相关文章:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值