c++ - Pthreads 和动态内存

标签 c++ multithreading pthreads dynamic-memory-allocation

我的线程例程是这样的

void * dowork(void * args)
{
    char* ptr = new char[25];
    memset(ptr, 0, sizeof(ptr));
    // Do some operations with ptr
    // What if I call delete[] ptr
}

我已经初始化了 5 个线程。 现在的问题,

  1. 这个线程安全吗?
  2. 哪个线程拥有内存?
  3. ptr 是否会在每次新线程处理 dowork 时重新初始化?如果是,之前分配的内存会怎样?
  4. 如果 delete[] ptr 被用在 dowork 的末尾怎么办?

最佳答案

  1. ptr 是本地指针,因此只要您不将指针传递给另一个线程,其他线程就不会干扰它。

  2. 运行此函数的两个线程将各自分配 1 个 char[25] 数组。但是线程不是所有者,而是拥有它的进程。

  3. ptr 将重新初始化,旧内存不会在线程连接时被删除。因此,如果不使用 delete,它将泄漏内存。

  4. delete[] 最好用 yes。

说明 ptr 是由操作系统分配的,每次调用 new 都会从操作系统分配一个新的指针。 ptr 的值,即它指向的位置,是一个本地堆栈变量,因此对线程来说是本地的,只要不进行通信,其他线程就无法获得它的值。

关于c++ - Pthreads 和动态内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16662989/

相关文章:

java - 不同线程写入/读取的原始类字段变量

java - 如何同步线程

c - 实现生产者/消费者沟通

c++ - pthread 上的段错误

c - c 中的线程,我在这里缺少什么?

c++ - 如何在不使用 CreateWindow(Ex) 的情况下创建窗口 (HWND)?

c++ - CMake 命令行定义不会延续到工具链文件

perl - 如何在内存占用大的Perl守护程序中处理多个套接字?

C++ - 整个程序持续时间的单个本地类实例

c++ - Boost :asio? 的最佳文档