在C中何时/如何删除信号量

在C中何时/如何删除信号量,c,semaphore,C,Semaphore,我正在编写一个简单的程序,它使用共享内存和信号量在读写时锁定它。程序完成后,必须删除所有共享内存和信号量。我们有自己的sem库,它实现了seminit、semrm、semgrab、semdown、semup等函数。我已经让程序运行了,但我不清楚信号量删除部分 由于所有信号都必须在最后删除,而程序被多次调用,我什么时候删除它们?我的意思是,我必须确保在它们仍在使用时不会删除它们。是否有可能检查它是否仍在使用 我不知道如何解决这个问题 简短的问题摘要: 程序被多次调用,信号量需要在最后被删除,只有一

我正在编写一个简单的程序,它使用共享内存和信号量在读写时锁定它。程序完成后,必须删除所有共享内存和信号量。我们有自己的sem库,它实现了seminit、semrm、semgrab、semdown、semup等函数。我已经让程序运行了,但我不清楚信号量删除部分

由于所有信号都必须在最后删除,而程序被多次调用,我什么时候删除它们?我的意思是,我必须确保在它们仍在使用时不会删除它们。是否有可能检查它是否仍在使用

我不知道如何解决这个问题

简短的问题摘要:
程序被多次调用,信号量需要在最后被删除,只有一个程序需要处理它,而不是另一个正在清理的程序。

如果没有关于库和如何使用信号量的更多详细信息,我将使用单例模式和引用计数的组合

关于单例模式的描述可以在维基百科上找到:

我将使信号量成为单例,并添加一个变量来跟踪已给出的信号量实例的数量。我将在
getInstance()
方法中增加变量。然后,我将向信号量类添加一个减少计数器的
releaseInstance()
方法<当程序使用信号量完成时,将调用code>releaseInstance()。然后,我将添加一个
isInUse()
方法来检查引用计数是否为0。如果是,您可以删除信号量

因此,您的程序将有如下内容:

mySemaphore.releaseInstance();
if(mySemaphore.isInUse() != true) {
    delete mySemaphore;
}
else {
    // Do nothing since it is a Singleton, and someone else is using it.
    // i.e. - We don't need to delete anything.
}

如果你有自己的图书馆,为什么要问这里?询问实现者并查看文档(如果有的话)。我不确定我是否理解目标,但是让一个信号量管理您的信号量的状态是否可能(如果愚蠢的话)?我已经想到了,但是我如何删除该信号量?嗯。。我的问题不够清楚。我不是问我的图书馆,而是问它一般是如何做到的。当在一个被多次调用的程序中使用时,如何删除它。我想这可以归结为知道程序何时完全执行完毕?(并且为了避免在过程中遇到停顿问题!)换句话说,您可以使用某种共享内存,每次进程试图获取锁时,共享内存都会增加,而当进程完成锁时,共享内存会减少。但是,如果一个刚完成,而另一个刚开始,但还没有增加变量,前一个过程删除它,因为它没有增加?“Singleton,delete,…”这个答案似乎是关于一些面向对象的语言(即C++),而问题显然是关于C。此外,这个答案描述了一个像智能指针那样的东西,为什么不简单地使用一个STD::SyrdypTR(当然是C++)?