代码之家  ›  专栏  ›  技术社区  ›  Lior

在线程中执行malloc

  •  4
  • Lior  · 技术社区  · 8 年前

    我正在用c编写一个使用POSIX pthreads的应用程序。在每个线程中都有一个函数 malloc 。所以我的问题是:

    1) 我是否保证每个线程分配不同的、不重叠的内存块?

    2) 是否可以从主线程(创建了分配内存的其他线程)访问分配的内存?

    我在Windows上使用gcc编译器,但我想知道Windows和Linux的答案。

    谢谢

    2 回复  |  直到 8 年前
        1
  •  6
  •   fuz    8 年前
    1. POSIX保证 malloc() 线程安全的 因为它可以同时在多个线程中使用。典型的 malloc() 为此采用内部锁定。
    2. POSIX保证一个进程有一个单一的平面地址空间。一个进程的多个线程共享一个MMU配置并可以访问相同的地址空间。在一个线程中分配的对象也可以从其他线程访问。
        2
  •  3
  •   cadaniluk    8 年前

    从…起 man malloc :

       +---------------------+---------------+---------+
       | Interface           | Attribute     | Value   |
       +---------------------+---------------+---------+
       | malloc(), free(),   | Thread safety | MT-Safe |
       | calloc(), realloc() |               |         |
       +---------------------+---------------+---------+
    

    malloc &朋友是线程安全的,所以我不认为有更多的话要说。由于它们都符合C99,这对于Linux和Windows都适用。