有3个进程:get, copy和put,它们对4个存储区域f、s、t和g进行操作: 其中:f有取之不尽的数据可以get;g有用之不完的空间可以put,s和t则只有一个存储空间。
semaphore fullS=0, emptyS=1;
semaphore fullT=0, emptyT=1;
void get()
{
while(true)
{
P(emptyS);
from f to s;
V(fullS);
}
}
void copy()
{
while(true)
{
// 答案上是两个条件都满足的时候,一下子从s就到t了
// P(fullS);
// get one from s;
// V(emptyS);
// P(emptyT);
// put it into t;
// V(fullT);
P(fullS);
P(emptyT);
from s to t;
V(fullT);
V(emptyS);
}
}
void put()
{
P(fullT);
from t to g;
V(emptyT);
}
void main()
{
cobegin;
get();
copy();
put();
coend;
}