0
与C编程有关。如果我在malloc'd结构中声明一个信号量,并且释放()结构,我仍然需要销毁信号量?
想我做到这一点:
struct myStruct
{
pthread_mutex_t myMutex;
sem_t mySemaphore;
};
`
而且我的malloc合适的大小和初始化信号:
myStruct *create_myStruct()
{
myStruct *temp;
temp = (myStruct *) malloc(sizeof(myStruct));
sema_init(&sema, 0, 0);
pthread_mutex_init(&(temp->myMutex), NULL);
return temp;
}
我还需要手动销毁信号量或只是免费打电话会做什么?
谢谢。我猜信号量的内部结构也包含指针。 – Henry
对于任何非平凡的结构都有一个破坏函数通常是一个好主意。 –
@亨利:内部结构是否包含指针并不重要,问题是信号量是一个资源,它的接口说它需要释放。它可能只包含一个小整数(如文件描述符是一个小整数),操作系统使用该整数来标识该资源。它可能不包含对资源的任何类型的引用,但OS在某种结构中保存其地址,并在您销毁时将其删除。它可能没有需要释放的资源,而'sem_destroy'是一个无操作的,但是为了允许它做某事的实现,你必须调用它。 –