jld*_*ont 2 linux malloc free shared-memory
有没有办法确定如果free()调用某个内存块指针是否会失败?
我有以下情况:有权访问共享资源的线程失败,而它可能处于释放所述资源的状态.现在我需要设计一种安全的方法来清理这个共享资源.
当然,我已经为正常情况分配了资源的所有权,但是上述限制情况呢?
更新:如果我使用其他同步机制,它只会做更多的清理工作,并可能涉及额外的限制条件.如果可能的话,我想限制/避免这些.
解决方案:我最终决定进行重新分解.感谢所有贡献者.你们好棒!
我见过各种各样的尝试,包括这一次:
void m_free(void **p)
{
if (*p != NULL) {
free(*p);
*p = NULL;
}
}
Run Code Online (Sandbox Code Playgroud)
取消引用类型惩罚指针不仅打破了各种平台,"插入这个示例"只有在初始化,释放和重新初始化每个现有函数(包括已编译的库)中的每个指针时才能工作,并使用C库做同样的事.
然后,处理优化和锁定免费线程安全问题.呸!
简而言之,如果您无法跟踪您在单个函数中分配的内容,则需要时间来重新考虑该函数.做得那么......你会发现对更安全的免费()的需求很快消失了.如果在一个支持的平台上工作,Valgrind就是你的朋友.根据你的标签,它真的是你的朋友:)
或者,使用malloc()自费运行垃圾收集,具体取决于您如何分配事物并完全摆脱free().之后,调试变得几乎终极有趣.
希望你能重新考虑?虽然您似乎也存在互相排斥的问题,但它只会导致重新分解.即,让free()之前的行阻塞,或者在尝试获取锁时失败..并且在具有锁的线程中将释放的指针设置为NULL,至少在您实现的结构中.