android - 由于多线程中的 free() 调用导致程序随机崩溃

标签 android c++ multithreading free

我有一段代码,里面有类似的东西:

int *mem_ptr;
.
.
if(mem_ptr)
{
    free(mem_ptr);
}
.
.

应用程序是多线程的。有时,一个线程通过了 if 检查,然后在 free() 上下文切换发生之前,另一个线程也通过了 if 检查,也执行 free()。现在,当控件返回到第一个线程时,它会在 free() 处崩溃并给出错误 Abort message: 'invalid address or address of corrupt block 0x40735cb0 passed to dlfree'

除了mutex,有没有更好的办法来处理这种情况

PS:我正在使用 C++ 开发 Android native 绑定(bind)程序,这段代码在 onTransact() 调用中。

最佳答案

如果两个或多个线程试图释放/删除相同的内存,那么代码和设计都会被破坏。虽然线程同步原语会有所帮助,但我也不会使用它们。应该只有一个线程释放内存。理想情况下,它应该是分配内存的人。如果不同,如跨线程消息传递的情况,仍然只有一个目标线程应该删除内存。

这就像说一个线程打开一个文件,任何线程都会关闭它。看起来不太好。文件的关闭应该由单线程完成,而不是由争用的多个线程完成。

关于android - 由于多线程中的 free() 调用导致程序随机崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37694647/

相关文章:

c++ - Gradle 包含目录 ('recursively' 下的所有文件)

java - Java中的多线程和同步

Android ListView 项目属性在滚动时发生变化

Android Syncadapter 不允许用户选择同步或不同步

android - 尝试在 ubuntu 中编译 android 内核时出错

c++ - 为什么我的 C++ ATL 项目链接到 CIL 库中?

c++ - 解析来自串口的完整消息

c++ - VC++ 和 GCC 下 boost::condition_variable 的不同行为

java - Thread.interrupt 上的 IllegalThreadStateException

android - 从通知栏与 AsyncTask 交互