如何使用' =='来检查信号量值?运营商?

时间:2014-10-12 05:20:02

标签: semaphore os161

声明并创建信号量 -

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

现在会发生什么,

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

if条件是否在上面执行?因为done设置为0,if块中的语句是否被执行?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

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

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