将信号量作为函数的参数传递

时间:2016-05-31 08:32:21

标签: c semaphore vxworks

我正在开发一种静态分析工具,用于检测信号量的锁定/释放调用之间是否存在不匹配。检测特定于VxWorks RTOS。

我遇到了这个测试用例

void fun(char semid);
char id,i;
int main()
{
    id = semCreate();         //initializing a semaphore
    fun(id);
    semGive(id);              //semaphore release call
    return 0;
}
void fun(char semid)
{
    semTake(semid);          //semaphore lock call
    i++;        
}

从逻辑上讲,代码是有意义的,我们可以通过锁定信号量来获得相应的版本,但这是否是使用信号量的正确方法?这是一个常规的编程实践还是明显无效?

支持或拒绝上面给出的信号量使用的一些详细代码将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

通过不同的函数分散锁定和释放调用是不好的风格,可能会导致很多丑陋的调试......

通常你会使用这样的信号量:

void someFunction(SEM_ID semId)

BooleanQuery booleanQuery = new BooleanQuery(); booleanQuery.add(query1, BooleanClause.Occur.MUST); booleanQuery.add(query2, BooleanClause.Occur.MUST); 也可以作为参数传递:if ((cEventStatus) && (ddayDif = 0)) { NSLog(@"upDateCountersWorking"); [self upDateCountersWorking]; }else if ((cEventStatus) && (ddayDif > 0 )){ NSLog(@"currentlyWorkingAddDays"); [self currentlyWorkingAddDays:&ddayDif]; }else if ((!cEventStatus) && (ddayDif = 0)){ NSLog(@"upDateCountersResting"); [self upDateCountersResting]; }else if ((!cEventStatus) && (ddayDif > 0)){ NSLog(@"currentlyRestingAddDays"); [self currentlyRestingAddDays:&ddayDif]; }else{ NSLog(@"final else"); }