我正在开发一种静态分析工具,用于检测信号量的锁定/释放调用之间是否存在不匹配。检测特定于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++;
}
从逻辑上讲,代码是有意义的,我们可以通过锁定信号量来获得相应的版本,但这是否是使用信号量的正确方法?这是一个常规的编程实践还是明显无效?
支持或拒绝上面给出的信号量使用的一些详细代码将受到高度赞赏。
答案 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");
}
。