我正在学习信号量以及如何以及何时使用信号量,根据我的理解,它们基本上是一个信号器,让进程知道何时没有,一个或多个资源可用于这两个简单的函数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
指向T1
和T2
; T3
指向{{1} }和T2
; T4
指向T5
和T3
; T5
指向T6
; T4
指向{{1} }和T7
; T5
指向T7
; T8
和T6
都指向T8
)
使用信号量我需要编写伪代码,以便可以发生最大并发性。基本预处理图T7
的示例:
T8
以下是我对上面显示的T1-T9的预占图的看法:
T9
所以,我的问题是:我知道有一种方法可以用少于4个信号量来做到这一点,那么这是如何实现的呢?如果我使用的数量少于4,我遇到的问题是,一旦信号量发出信号表示资源可用,任何进程(p2,p3,p4,p5)都可以启动,因为它们是同时运行的。有什么想法吗?