我有三个POSIX?信号量和几个错误条件。信号量可在全球范围内访问。如何在发生错误之前检查它们是否被销毁(或者如果它们首先被初始化)。
// Example c program
#include <semaphore.h>
sem_t mySemaphore;
void errorHandling(){
// if (mySemaphore exists)
// sem_destroy(&mySemaphore);
}
int main(){
// possible errors
if ((sem_init(&mySemaphore, 0, 1)) < 0)
errorHandling();
// more possible errors and multi threading stuff
sem_destroy(&mySemaphore);
return (EXIT_SUCCESS);
}
答案 0 :(得分:1)
您需要一个单独的标志,默认情况下为false。初始化时设置为true,销毁时设置为false。
如果是多线程应用,请确保互斥保护这些访问。另外,我强烈建议您编写函数来在一个地方处理所有这些。
答案 1 :(得分:0)
参考OP的代码,并根据sem_init()联机帮助页,在可能已经初始化的信号量上调用该函数会导致未定义的行为。如果您不关心潜在种族,则可以尝试调用sem_getvalue()并使用其EINVAL返回值来测试先前的semphore的初始化。