首页 > 代码库 > java实现PV操作
java实现PV操作
package com.jayfulmath.designpattern.command;import java.util.concurrent.Semaphore;/* P(S): ①将信号量S的值减1,即S=S-1; ②如果S>=0,则该进程继续执行;否则该进程置为等待状态。 V(S): ①将信号量S的值加1,即S=S+1; ②该进程继续执行;如果该信号的等待队列中有等待进程就唤醒一等待进程。 * * */public class PVObject { private Semaphore mSemaphore =null; private int Max_size = 0xff; private String name = null; public PVObject(int size,String name) { if(size>0) { Max_size = size; mSemaphore = new Semaphore(size); } this.name = name; } public PVObject(String name) { Max_size = 1; mSemaphore = new Semaphore(1); this.name = name; } public void Init(int status) { if(status<0 || status>Max_size) { System.out.println("[PVObject][Init]"+name+" wrong,status:"+status); return; } if(status == Max_size) { return; } try { mSemaphore.release(Max_size); mSemaphore.acquire(Max_size-status); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void P() { try { // mSemaphore.acquire(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void V() { mSemaphore.release(); }}
Max_size 为允许同时使用信号量的个数,默认情况是1个。
java实现PV操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。