Linux sem_destroy()
文档说:
未命名的信号灯应在内存所在的位置之前用
sem_destroy()
销毁。 位于被释放。否则,可能会导致某些实现上的资源泄漏。
但是我能做的最好的事情是将sem_destroy()
注册到atexit()
,在中止或SIGKILL
时不会调用它。我有一个过程负责在共享内存(一个mmaped文件)上创建和销毁信号灯,如何避免异常终止条件下的资源泄漏?
在Linux上,如果在调用sem_destroy()
之前删除了mmaped文件,是否会泄漏任何类型的资源?什么资源?
答案 0 :(得分:4)
sem_destroy
的glibc实现没有任何作用,并且不会改变。如果使用glibc,则无需执行任何操作来释放资源。此外,内核仍会在进程终止时释放此类资源。
信号量的glibc实现基于futexes,这就是为什么除了用于存储信号量的内存之外,它不需要任何其他资源的原因。