`
tonysmith
  • 浏览: 177417 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

信号量机制 Semaphore

阅读更多

操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java并发库Semaphore可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,acquire()获取一个许可,如果没有就等待,而release()释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。

Semaphore维护了当前访问的个数,提供同步机制,控制同时访问的个数。在数据结构中链表可以保存“无限”的节点,用Semaphore可以实现有限大小的链表。另外重入锁ReentrantLock也可以实现该功能,但实现上要负责些,代码也要复杂些。

下面的Demo中申明了一个只有5个许可的Semaphore,而有20个线程要访问这个资源,通过acquire()和release()获取和释放访问许可。

package concurrent;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

public class TestSemaphore {
  public static void main(String[] args) {
    // 线程池
    ExecutorService exec = Executors.newCachedThreadPool();
    // 只能5个线程同时访问
    final Semaphore semp = new Semaphore(5);
    // 模拟20个客户端访问
    for (int index = 0; index < 20; index++) {
      final int NO = index;
      Runnable run = new Runnable() {
        public void run() {
          try {
            // 获取许可
            semp.acquire();
            System.out.println("Accessing: " + NO);
            Thread.sleep((long) (Math.random() 10000));
            // 访问完后,释放
            semp.release();
          catch (InterruptedException e) {
          }
        }
      };
      exec.execute(run);
    }
    // 退出线程池
    exec.shutdown();
  }
}

运行结果:
Accessing: 0
Accessing: 1
Accessing: 2
Accessing: 3
......
Accessing: 17
Accessing: 18
Accessing: 19

分享到:
评论

相关推荐

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

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

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

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

    信号量机制实现线程同步

    信号量机制是操作系统中一种重要的同步机制,它用于控制对共享资源的访问,以避免多线程并发执行时出现的数据不一致性或竞态条件。在本文中,我们将深入探讨信号量的概念、类型以及如何在实际编程中应用信号量来实现...

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

    总之,理解并正确使用C++中的信号量机制对于编写高效、可靠的多线程程序至关重要。在MFC工程中,通过自定义信号量类和Windows API,我们可以有效地解决多线程同步问题,确保程序的正确性和性能。

    Java进程信号量机制的实验程序

    综上所述,Java进程信号量机制是解决多线程环境中资源管理和同步问题的有效工具,通过Semaphore类提供的API,开发者可以灵活地控制并发程度,避免资源过度竞争,保证程序的正确性和效率。在实际项目中,根据需求选择...

    操作系统 信号量机制 课件

    操作系统中的信号量机制是一种重要的进程同步工具,源于交通信号灯的概念,用于协调系统内部进程的同步及互斥问题。信号量是一个系统全局变量,其值只能通过P(等待)和V(唤醒)这两个原子操作来改变。 信号量的...

    信号量的应用

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

    rt-thread信号量_holecev_RT-Thread_rtthread信号量_信号量_

    "holecev"可能是作者或项目的别名,而"RT-Thread_rtthread信号量_信号量_"则是强调了这个资料主要关注RT-Thread中的信号量机制。 信号量在RT-Thread中的应用主要包括以下方面: 1. **同步**:当多个线程需要协同...

    信号量的设计与实现--课程设计指导书

    信号量的设计与实现 信号量是一种大于或等于 0 的整...通过实验,掌握模块化操作系统和信号量的实现机制,对于进程同步与互斥使用资源、操作系统服务程序的编写等有全面认识。在 MINIX 3 操作系统中实现 P、V 操作。

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

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

    linux信号量机制

    Linux 信号量机制是一种用于多线程和多进程同步的重要工具,主要目的是管理和保护共享资源,防止并发访问导致的数据不一致。信号量本质上是一个非负整数计数器,其核心在于通过计数值来控制对公共资源的访问权限。 ...

    信号量Semaphore了解过吗?

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

    c语言信号量的使用实例

    信号量是一种用于解决进程间同步问题的机制,在多线程或多进程环境中尤为重要。它通过控制共享资源的访问来避免竞态条件,确保数据的一致性。信号量本质上是一个整型变量,可以对其执行两种操作:`P`(或`wait`)...

    QT 下 信号量使用

    在QT框架中,信号量(Semaphore)是一种非常重要的同步机制,它源于进程间通信(IPC)的概念,并在多线程编程中广泛使用。信号量允许我们控制对共享资源的访问,确保同一时间只有一个线程或者有限数量的线程能够访问...

    Minix中实现信号量

    add server.ppt 文件看起来是一个PowerPoint演示文稿,可能介绍了如何在Minix中添加一个新的服务器来利用信号量机制。在Minix中,服务器是处理特定类型系统调用的程序,比如进程管理、文件系统操作等。这个PPT可能...

    易语言多线程控制:信号量控制线程数量

    总结起来,易语言的多线程控制结合信号量机制,为开发者提供了一种有效的并发控制手段。通过合理地使用信号量,我们可以精确地管理线程的并发数量,保证程序的稳定性和效率。在实际开发中,根据具体应用场景调整信号...

    MFC关于信号量的例子

    例如,可以通过调整信号量的初始值和最大值来控制并发程度,通过结合其他同步机制(如互斥量、事件等)来解决更复杂的问题。总之,理解和掌握信号量在MFC中的应用,对于编写高效、稳定的多线程程序至关重要。

    LINUX内核信号量设计与实现.rar

    本资料主要探讨了Linux内核中的信号量机制,是研究和优化并发程序的宝贵教程。 信号量在操作系统中起着“交通警察”的角色,它通过计数器的形式来保护临界区,避免发生数据竞争和死锁。在Linux内核中,信号量分为两...

    OS-semaphore.rar_Semaphore_semaphore. windows

    信号量机制源于荷兰计算机科学家Dijkstra提出的银行家算法,其核心思想是通过一个计数器来管理资源的数量,从而实现对资源的并发访问控制。 信号量分为两种类型:二进制信号量(Binary Semaphore)和计数信号量...

    有关水果问题的信号量程序

    信号量机制是操作系统中一种重要的同步工具,常用于解决多线程环境中的资源竞争问题。本问题中,通过“爸爸放苹果,妈妈放橘子,盘子只能容纳两个水果。儿子只吃苹果,女儿只吃橘子”的情景,我们可以深入理解信号量...

Global site tag (gtag.js) - Google Analytics