对操作系统熟悉的朋友看一下?(200分)

  • 主题发起人 主题发起人 迈克老狼
  • 开始时间 开始时间

迈克老狼

Unregistered / Unconfirmed
GUEST, unregistred user!
题目如何用二进制信号量实现计数信号量?
下面是书中的例子,我怎么看不懂啊,
wait(s1)执行的是什么操作啊? s
高教社《操作系统概念》一书
154页(中文版)
binary-semaphore s1,s2;
int c;
初始化s1=0;,s2=0,c为计数信号量S的初值。
计数信号量S的操作wait可实现如下:
wait(s1);
c--;
if (c<0)
{
signal(s1);
wait(s2);
}
signal(s1);
计数信号量S的signal可实现如下:
wait(s1)
C++;
if (c<=0)
signal(s2)
else

signal(s1);
 
Windows.CreateSemaphore --创建一个信号量,第二参数:初始信号量;共可使用信号计数
Windows.ReleaseSemaphore --释放一个信号量,即CreateSemaphore的初始信号量--
Windows.WaitForSingleObject --等待信号,如果返回成功则信号量++
 
WIN的这一组函数即是上面的实现,
你到VCL查一查这几个函数的实现就会明白
 
Semaphore = CreateSemaphore (nil, initCount, maxCount)
ReleaseSemaphore:
Semaphore.InitCount--
WaitForSingleObject则是:
if SemaPhore.InitCount < Semaphore.maxcount then

阻塞等待
else
SemaPhore.InitCount++
 

Similar threads

后退
顶部