0

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

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

我不确定如何解决这个问题。

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

4

1 回答 1

-1

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

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

我会将信号量设为单例,并添加一个变量来跟踪已发出的信号量实例的数量。我会增加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.
}
于 2013-01-12T17:54:23.907 回答