gpt4 book ai didi

c - 以原子方式释放内存

转载 作者:太空宇宙 更新时间:2023-11-04 05:33:56 25 4
gpt4 key购买 nike

这是一个函数,我用它来释放动态分配的内存

void Free(void* arg) {
if(arg!=NULL) {
free(arg);
arg=NULL;
}
}

到目前为止它工作正常,直到我开始使用 pthreads。时不时我的堆栈被砸碎,我唯一能做的就是使用 pthread_mutex_lock()
在 gcc 中是否有任何原子公告来检查和释放内存?
或者您可以提出另一种解决方案吗?我希望互斥锁不是唯一的方法

最佳答案

mallocfree 函数在内部使用互斥体来确保堆得到正确管理。然而,这并不能防止您的应用程序尝试从多个线程读取/写入变量。

每当读取或写入两个或多个线程有权访问的变量时,您需要使用互斥锁来保护该访问。否则你最终会得到不一致的状态并且你无法预测你的程序的行为。

附带说明一下,您编写的函数不会将传入的指针设置为 NULL。它所做的是将局部变量设置为 NULL,这对调用函数是不可见的。为此,它需要接受一个 void **:

void Free(void **arg) {
if(arg!=NULL) {
free(*arg);
*arg=NULL;
}
}

这样调用:

Free((void **)&ptr);

这是使用宏实际上更干净的情况之一:

#define Free(arg) do { free(arg); (arg) = NULL; } while (0)

关于c - 以原子方式释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48886200/

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