• 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个。
  • 相关阅读:
    PHP获取当前页面完整url地址,包括参数的函数
    研究在SAE上搭建最新wordpress
    CentOS6.5 编译安装lnmp环境
    cried me a river--kristinia debarge
    Bad Day -- Daniel Powter
    Back to December -- Taylor Swift
    英语单词的偏旁部首之常见前缀(一)
    21 Guns -- Green Day
    影子
    BNUOJ 1037 精神控制
  • 原文地址:https://www.cnblogs.com/deman/p/4184634.html
Copyright © 2020-2023  润新知