【问题标题】:how to check if malloc holds the lock如何检查malloc是否持有锁
【发布时间】:2018-05-08 11:27:48
【问题描述】:

我的代码中遇到如下问题:

1.A process was using malloc to allocate the memory.
2.While allocation process was interrupted and respective signal handler was 
called. 
3.in the signal handler again malloc was called, which leads to a hang.

现在经过一番谷歌搜索后,我知道我不应该在信号处理程序中分配内存。

有没有办法处理这个问题,不需要我避免在信号处理程序中使用 malloc?例如检查 malloc 是否已在进行中或保持锁定。

【问题讨论】:

  • 使用全局标志并在第一个 malloc() 之前更新它。在信号处理程序中,在 malloc() 之前检查此标志并采取相应措施。但是,在这种方法中可能存在竞争。
  • 您需要分配的金额是固定的吗?你能在程序开始时预先分配它吗?
  • @galik,不幸的是没有。在我的程序运行时,根据某些条件,内存要求可能会有所不同。所以这对我来说是不可能的。

标签: c++ memory locking malloc signals


【解决方案1】:

在信号处理程序内部,您只能调用async-signal-safe functionsmalloc 不是其中之一。不过,您可以尝试预先分配内存以用于信号处理程序(在安装信号处理程序之前)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2017-02-04
    • 2019-06-10
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多