声明并创建信号量 -
static struct semaphore *done;
done = sem_create("done",0); // semaphore value initialized to zero
现在会发生什么,
if(done==NULL)
{
//Something done here...
}
if条件是否在上面执行?因为done设置为0,if块中的语句是否被执行?
答案 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