使用信号量时如何避免资源泄漏?

时间:2018-10-04 12:34:42

标签: linux posix semaphore glibc

Linux sem_destroy()文档说:

  

未命名的信号灯应在内存所在的位置之前用sem_destroy()销毁。   位于被释放。否则,可能会导致某些实现上的资源泄漏。

但是我能做的最好的事情是将sem_destroy()注册到atexit(),在中止或SIGKILL时不会调用它。我有一个过程负责在共享内存(一个mmaped文件)上创建和销毁信号灯,如何避免异常终止条件下的资源泄漏?

在Linux上,如果在调用sem_destroy()之前删除了mmaped文件,是否会泄漏任何类型的资源?什么资源?

1 个答案:

答案 0 :(得分:4)

sem_destroy的glibc实现没有任何作用,并且不会改变。如果使用glibc,则无需执行任何操作来释放资源。此外,内核仍会在进程终止时释放此类资源。

信号量的glibc实现基于futexes,这就是为什么除了用于存储信号量的内存之外,它不需要任何其他资源的原因。