0

A semaphore is declared and created like this --

static struct semaphore *done;
done = sem_create("done",0); // semaphore value initialized to zero

Now what happens when,

if(done==NULL)
{
     //Something done here...
}

the if condition is executed above ? since done was set to 0 do the statements inside the if block get executed ?

4

2 回答 2

1

done是指向信号量的指针,条件done==NULL检查新信号量的创建是否成功,在这种情况下done将保存新信号量的地址,或者失败,在这种情况下done将保存NULL

简而言之,这个条件不检查信号量的状态,而是检查它是否被创建。

于 2014-10-12T05:30:42.247 回答
1

我正在回答关于 OS161 实现的这个问题。done 是指向信号量的指针,仅当 sem_create 由于内存不可用或其他内存限制而未创建信号量时,它才会为 NULL。

作为参数传递给函数的 0 值,该函数将信号量的初始计数初始化为 0。计数可以通过 done->count 访问,然后可以根据计数值执行特定代码。

在为 OS161 编码时,我使用信号量解决了一些同步问题,您可以在下面给出的链接中查看它们:

https://github.com/prathammalik/OS161/tree/master/kern/synchprobs

于 2015-06-26T19:21:58.637 回答