gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:51:23 27 4
gpt4 key购买 nike

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 时被调用.我有一个负责在共享内存(一个映射文件)上创建和销毁信号量的进程,如何避免异常终止条件下的资源泄漏?

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

最佳答案

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

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

关于linux - 使用信号量时如何避免资源泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52646862/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com