在Java中,如何将一个Semaphore用于多个进程?

时间:2016-02-25 03:48:10

标签: java multithreading concurrency scheduled-tasks semaphore

我正在学习信号量以及如何以及何时使用信号量,根据我的理解,它们基本上是一个信号器,让进程知道何时没有,一个或多个资源可用于这两个简单的函数c.offset(0,3)p(Semaphore)定义为:

v(Semaphore)

我有一个包含9个进程的优先级图T1 - T9

public int p(Semaphore someSemaphore){
    if (someSemaphore == 0)
        // Put process into Queue
    else
        someSemaphore = someSemaphore - 1;
    return someSemaphore;

public int v(Semaphore someSemaphore){
    if (// Queue is not empty)
        // Take some process out of Queue and resume execution
    else
        someSemaphore = someSemaphore + 1;
    return someSemaphore;

上面图层上的每个流程都指向下面图层上的相邻流程( T1 / \ T2 T3 / \/ \ T4 T5 T6 \ /\ / T7 T8 \ / T9 指向T1T2; T3指向{{1} }和T2; T4指向T5T3; T5指向T6; T4指向{{1} }和T7; T5指向T7; T8T6都指向T8

使用信号量我需要编写伪代码,以便可以发生最大并发性。基本预处理图T7的示例:

T8

以下是我对上面显示的T1-T9的预占图的看法:

T9

所以,我的问题是:我知道有一种方法可以用少于4个信号量来做到这一点,那么这是如何实现的呢?如果我使用的数量少于4,我遇到的问题是,一旦信号量发出信号表示资源可用,任何进程(p2,p3,p4,p5)都可以启动,因为它们是同时运行的。有什么想法吗?

0 个答案:

没有答案