如何判断信号量是否已被破坏,如果没有破坏它,我怎么知道呢

时间:2012-11-24 02:27:53

标签: c semaphore posix-api

我有三个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);
}

2 个答案:

答案 0 :(得分:1)

您需要一个单独的标志,默认情况下为false。初始化时设置为true,销毁时设置为false。

如果是多线程应用,请确保互斥保护这些访问。另外,我强烈建议您编写函数来在一个地方处理所有这些。

答案 1 :(得分:0)

参考OP的代码,并根据sem_init()联机帮助页,在可能已经初始化的信号量上调用该函数会导致未定义的行为。如果您不关心潜在种族,则可以尝试调用sem_getvalue()并使用其EINVAL返回值来测试先前的semphore的初始化。