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

Linux sem_destroy()文档说:

An unnamed semaphore should be destroyed with sem_destroy() before the memory in which it is
located is deallocated. Failure to do this can result in resource leaks on some implementations.

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

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

解决方法:

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

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

上一篇:在Java中释放Semaphore对象的正确方法是什么?


下一篇:SQL Server 第三章 结构化查询语言