`

信号量Semaphore

 
阅读更多

个人学习笔记,如有错误欢迎指正。。

 

信号量Semaphore ,一般用于限制对某些资源固定数量的访问。

 

Semaphore维护了N个的许可,某线程通过acquire()获取一个许可或acquire(int permits) 获取多许可,如果许可数量N大于线程要求的许可数,线程得到许可并可以继续执行。

否则线程阻塞,等待某线程释放许可。

某线程释放许可,许可数量增加并唤醒被阻塞的线程,阻塞线程唤醒后再试着获取许可,获取成功则继续执行否则再次阻塞。

 

Semaphore内部使用AbstractQueuedSynchronizer

 

方法:

 void acquire()
          从此信号量获取一个许可,在提供一个许可前一直将线程阻塞,否则线程被中断
 void acquire(int permits)
          从此信号量获取给定数目的许可,在提供这些许可前一直将线程阻塞,否则线程是已中断的
 void acquireUninterruptibly()
          从此信号量中获取许可,在有可用的许可前将其阻塞。
 void acquireUninterruptibly(int permits)
          从此信号量获取给定数目的许可,在提供这些许可前一直将线程阻塞。
 int availablePermits()
          返回此信号量中当前可用的许可数。
 int drainPermits()
          获取并返回立即可用的所有许可。
protected  Collection<Thread> getQueuedThreads()
          返回一个 collection,包含可能等待获取的线程。
 int getQueueLength()
          返回正在等待获取的线程的估计数目。
 boolean hasQueuedThreads()
          查询是否有线程正在等待获取。
 boolean isFair()
          如果此信号量的公平设置为 true,则返回 true。
protected  void reducePermits(int reduction)
          根据指定的缩减量减小可用许可的数目。
 void release()
          释放一个许可,将其返回给信号量。
 void release(int permits)
          释放给定数目的许可,将其返回到信号量。
 String toString()
          返回标识此信号量的字符串,以及信号量的状态。
 boolean tryAcquire()
          仅在调用时此信号量存在一个可用许可,才从信号量获取许可。
 boolean tryAcquire(int permits)
          仅在调用时此信号量中有给定数目的许可时,才从此信号量中获取这些许可。
 boolean tryAcquire(int permits, long timeout, TimeUnit unit)
          如果在给定的等待时间内此信号量有可用的所有许可,并且当前线程未被中断,则从此信号量获取给定数目的许可。
 boolean tryAcquire(long timeout, TimeUnit unit)
          如果在给定的等待时间内,此信号量有可用的许可并且当前线程未被中断,则从此信号量获取一个许可。
分享到:
评论

相关推荐

    信号量Semaphore了解过吗?

    信号量Semaphore,这是一个在多线程编程中至关重要的同步机制,尤其在操作系统设计和并发编程领域,它扮演着协调多个线程对共享资源访问的角色。面试中被问及但回答不出,可能会显示出对并发控制理解的不足,因此,...

    Java 信号量Semaphore的实现

    Java 信号量Semaphore的实现 Java 信号量Semaphore是Java并发编程中的一种机制,用于控制多个线程的并发执行。Semaphore的实现主要是通过计数器来实现的,每个Semaphore对象都维护着一个计数器,用于记录当前可用的...

    python线程信号量semaphore使用解析

    这篇文章主要介绍了python线程信号量semaphore使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.semaphore信号量原理 多线程同时运行,能提高程序的...

    使用信号量(Semaphore)实现线程的同步

    信号量(Semaphore)是操作系统中一种重要的同步机制,它用于管理多个线程对共享资源的访问,以防止并发执行时产生竞态条件。在多线程编程中,当多个线程试图同时访问一个有限的资源时,信号量可以帮助我们协调这些...

    semaphore的使用.pdf

    关于Android变成中的信号量semaphore,在使用过程中我们往往搞不清楚其信号量的申请和使用。这里主要针对信号量初始值为零的情况做介绍,其他情况不做讨论。初始值为零的情况较少使用,部分代码中的这个情况往往让...

    semaphore控制多线程循序执行

    Semaphore(信号量)是一种经典的同步机制,它源自于荷兰计算机科学家Edsger W. Dijkstra提出的银行家算法。本示例中,我们将深入探讨如何使用Semaphore来控制多线程的循序执行。 Semaphore是一种计数信号量,它...

    C#信号量,用于多线程

    ### C#中的信号量Semaphore与多线程管理 在探讨C#中的`Semaphore`类之前,我们先简单回顾一下多线程的基本概念。在计算机科学领域,多线程是指一个程序内部可以同时运行多个线程(即执行路径),每个线程都可以独立...

    Java信号量Semaphore

    Semaphore  Semaphore分为单值和多值两种,前者只能被一个线程获得,...单个信号量的Semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁”,再由另一个线程释放“锁”,这可应用于死锁恢复的一些场

    JAVA 多线程之信号量(Semaphore)实例详解

    **JAVA 多线程之信号量Semaphore实例详解** 在Java多线程编程中,信号量Semaphore是一种非常重要的同步工具,用于控制对公共资源的访问。Semaphore类位于`java.util.concurrent`包下,它允许我们限制同时访问特定...

    vxworks多任务(task和semaphore信号量及事件)例程.zip

    资源包含了vxworks多任务(task和semaphore信号量及事件)的相关编程例子,通过创建多任务的简单例子,帮助大家了解taskSpawn函数、信号量semaphore、以及事件event的使用方法。

    sem.rar_Semaphore

    其中,信号量Semaphore是一种重要的同步机制,用于解决多进程或线程之间的资源竞争问题。本知识点将深入探讨Semaphore的概念、工作原理以及如何在实际编程中应用它来实现进程同步。 **1. 信号量Semaphore的定义** ...

    多线程代码 经典线程同步互斥问题 生产者消费者问题

    a: 创建一个线程 b: 创建多个线程 c: 多线程访问同一资源 d: 经典线程同步互斥问题 e: 使用关键段解决子线程互斥问题 f: 利用事件实现线程同步问题 ...I: 信号量 semaphore 解决线程同步问题

    信号量同步等待机制 semaphore wait-and-signal

    ### 信号量同步等待机制(Semaphore Wait-and-Signal) #### 一、引言 在多线程编程中,临界资源的访问管理是一项至关重要的任务。为了确保数据的一致性和程序的正确执行,必须采取有效的机制来防止多个线程同时...

    c++多线程同步——信号量

    信号量(Semaphore)是实现多线程同步的一种有效工具,常用于控制对共享资源的访问。在这个名为"Mthread11"的MFC工程中,我们可以看到如何在C++环境中应用信号量来解决多线程间的同步问题。 首先,我们需要理解什么...

    信号量(Semaphore)

    信号量(Semaphore)哲学家进餐问题(the dining philosophers problem)---------------------------程序

    信号量的应用

    信号量可以分类为整型信号量(integer semaphore)和记录型信号量(record semaphore)。整型信号量是最简单的信号量,记录型信号量则在整型信号量的基础上增加了一个进程等待队列。 信号量的创建需要使用 semget ...

    JAVA多线程--信号量(Semaphore)_.docx

    JAVA多线程--信号量(Semaphore) 信号量(Semaphore)是一种多线程环境下的设施,负责协调各个线程,以保证它们能够正确、合理地使用公共资源。从概念上讲,信号量维护了一个许可集。 信号量的类型有两种:单值信号...

    c语言信号量的使用实例

    ### c语言信号量的使用实例 #### 一、信号量的基本概念 信号量是一种用于解决进程间同步问题的机制,在多线程或多进程环境中尤为重要。它通过控制共享资源的访问来避免竞态条件,确保数据的一致性。信号量本质上是...

    Windows临界区,内核事件,互斥量,信号量.pdf

    Windows提供了多种同步机制,包括临界区(Critical Sections)、内核对象(如事件Event、互斥量Mutex、信号量Semaphore)等,它们各自有不同的特点和使用场景。 ### 临界区(Critical Sections) 临界区是最轻量级...

Global site tag (gtag.js) - Google Analytics