`

信号量使用案例

阅读更多

 

信号量使用案例:

 

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class MySemaphore extends Thread {
Semaphore position;
private int id;
public MySemaphore(int i,Semaphore s){
    this.id=i;
    this.position=s;
}

public void run(){
    try{
    	if(position.getQueueLength()>30){
    		//如果拍排队人数超过30人     	
    		System.out.println("顾客["+this.id+"],由于排队人数"+position.getQueueLength()+"太长,请换个厕所");
    		return;
    	}
     if(position.availablePermits()>0){
      System.out.println("顾客["+this.id+"]进入厕所,有空位");
     }
     else{
      System.out.println("顾客["+this.id+"]进入厕所,没空位,排队");
     }     
     position.acquire();
     System.out.println("顾客["+this.id+"]获得坑位");
     Thread.sleep((int)(Math.random()*1000));
     System.out.println("顾客["+this.id+"]使用完毕");
     position.release();
    }
    catch(Exception e){
     e.printStackTrace();
    }
}
public static void main(String args[]){
  ExecutorService list=Executors.newCachedThreadPool();
    Semaphore position=new Semaphore(5);//信号量是5,时间片内最多只有5个顾客上厕所
    for(int i=0;i<100;i++){
     list.submit(new MySemaphore(i+1,position));
    }
    list.shutdown();
    position.acquireUninterruptibly(2);
    System.out.println("使用完毕,需要清扫了");
    position.release(2);
}
}

 

 

分享到:
评论

相关推荐

    信号量使用实例

    可使用信号量进行进程内的线程之间同步,信号量还可以支持进程间同步。

    CSemaphore信号量使用实例

    在这个实例中,我们将探讨`CSemaphore`如何帮助我们实现线程安全的并发控制,以及如何使用`WaitForSingleObject()`和`ReleaseSemaphore()`函数来操作信号量。 信号量是一种同步机制,它可以控制多个线程对共享资源...

    c语言信号量的使用实例

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

    linux信号量实例代码

    linux 信号量 实例代码linux 信号量 实例代码linux 信号量 实例代码linux 信号量 实例代码linux 信号量 实例代码linux 信号量 实例代码linux 信号量 实例代码linux 信号量 实例代码linux 信号量 实例代码linux 信号...

    UCOSII信号量管理实例工程

    这个实例工程将通过具体的代码示例,展示如何在UCOSII中有效地使用信号量管理共享资源,如何避免并发访问冲突,以及如何优化系统的性能。理解并掌握这些知识点对于提升STM32平台上的UCOSII应用开发能力至关重要。...

    ucos-ii学习笔记——信号量集(事件标志组)的原理及使用

    UCOS-II学习笔记——信号量集(事件标志组)的原理及使用 UCOS-II操作系统中的信号量集(事件标志组)是一种同步机制,用于控制任务之间的同步和通信。信号量集是UCOS-II操作系统中的一个重要组件,用于协调多个...

    使用共享内存及信号量实现进程间通信例子

    本示例代码着重于使用共享内存和信号量来解决进程间的通信和同步问题,这是一种高效且灵活的方法,特别是在多处理器和多线程环境中。下面我们将详细探讨这些概念以及它们在Linux系统中的实现。 **共享内存** 是一种...

    Visual C++信号量线程同步的简单实例工程

    本实例工程“Visual C++信号量线程同步的简单实例工程”聚焦于如何通过信号量(Semaphore)实现线程间的协调与同步,以确保资源的有效管理和避免竞态条件。 首先,我们需要理解什么是信号量。信号量是一种同步原语...

    UCOS2_STM32_任务间信号量通信(一)_应用实例描述.zip

    本文将深入探讨如何在STM32微控制器上利用UCOS2实现任务间的信号量通信,以及如何通过实际应用案例来理解这一过程。 UCOS2(Micrium OS II)是一款流行的小型RTOS,它提供了多种任务同步和通信机制,包括信号量。...

    Linux线程管理-线程信号量的使用实例.pdf

    本文将深入探讨Linux线程管理中的线程信号量使用实例。 线程信号量是一个整数值,可以被线程递增或递减,并且具有一个关联的等待队列。当线程试图减小信号量值但其值为0时,该线程将被阻塞并加入到等待队列中,直到...

    信号量的使用

    信号量是一种在多线程和多进程环境下用于同步和互斥的机制,它在操作系统中扮演着至关重要的角色..."sigdemo"这样的源代码实例为我们提供了一个实践信号量概念的机会,通过学习和分析,我们可以加深对这一概念的理解。

    ucos-ii学习笔记——信号量的原理及使用

    ucos-ii学习笔记——信号量的原理及使用 ucOS-II 是一个开源的实时操作系统,广泛应用于嵌入式系统中。信号量是ucOS-II中的一种同步机制,用于多任务之间的同步和互斥访问共享资源。下面是对ucOS-II中信号量的原理...

    linux下信号量控制实例

    linux下信号量控制同步问题,已经通过测试,很经典

    19,信号量_rtthread_STM32F103_RTT_信号量_

    在压缩包中的"01,二值信号量"文件很可能是包含了一个示例,演示如何创建、初始化和使用二值信号量。"02,计数信号量"则可能展示了计数信号量的使用方法,包括创建、获取和释放过程。通过这两个实例,开发者可以学习...

    LT-ARM214X学习板ucos任务间信号量通信实验

    计数信号量可以管理多个资源实例。 在这个实验中,你可能会学习到以下知识点: 1. **uC/OS系统初始化**:如何配置和启动uC/OS操作系统,包括任务创建、时钟节拍设置以及内存管理等。 2. **任务创建与调度**:理解...

    ucos 信号量集

    通过结合讲授、上机练习、案例分析等教学方法,可以全面理解和掌握信号量集的使用技巧。 #### 七、总结 信号量集是uCos-II系统中一种高效的多事件同步机制,通过合理的逻辑关系配置,可以在复杂的多任务环境中实现...

    STM32的UCOSII信号量程序,亲测可用

    在给定的资源中,"STM32的UCOSII信号量程序,亲测可用"是一个实用的学习案例,它包含了如何在STM32上使用UCOSII的信号量机制。信号量是RTOS中的一个关键同步工具,用于控制对共享资源的访问,避免数据竞争和死锁现象...

    MFC关于信号量的例子

    1. **创建信号量**:首先,我们需要实例化一个CSemaphore对象,传递初始值和最大值作为参数。初始值表示信号量创建时的计数值,最大值则是信号量允许的最大计数值。例如: ```cpp CSemaphore semaphore(...

    Vxworks的信号量机制实现任务同步

    计数信号量类似于二进制信号量,但其值可以随着信号量的释放次数而变化,适合于保护多个实例的同一资源。 ### 二、二进制信号量详解 #### 1. 基本概念 二进制信号量是一个状态标记,表示资源的可用性,其值只能是...

    操作系统实验-信号量机制实现进程同步

    信号量分为两种类型:整型信号量和记录型信号量。整型信号量只包含一个整数值,而记录型信号量则包含一个整数值和一个等待队列。在本实验中,你可能会使用PV操作来管理共享资源的访问,确保并发进程的正确调度。 总...

Global site tag (gtag.js) - Google Analytics