我正在编写一个简单的程序,它使用共享内存和信号量来在读取或写入时锁定它。程序完成后,必须删除所有共享内存和信号量。我们有自己的sem库,它实现了seminit,semrm,semgrab,semdown,semup等功能。我的程序工作正常,但我不清楚信号量删除部分。
由于最后必须删除所有信号量,而多次调用该程序,何时删除它们?我的意思是,我必须确保在它们仍在使用时我不删除它们。有没有可能检查它是否仍在使用?
我不确定如何解决这个问题。
简短问题摘要: programm被多次调用,信号量需要在最后被删除,只有一个程序必须处理它,而不是另一个正在清理的程序。
答案 0 :(得分:-1)
如果没有关于库的更多细节以及如何使用信号量,我会使用Singleton模式和引用计数的组合。
可以在维基百科上找到单身人士模式的描述:Singleton pattern
我会将信号量设为Singleton,并添加一个变量来跟踪已发出的信号量的实例数。我会在getInstance()
方法中增加变量。然后我会在信号量类中添加一个releaseInstance()
方法,递减计数器。使用信号量完成程序时将调用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.
}