在线程中执行 malloc
performing malloc in threads
我正在用 c 编写一个使用 POSIX pthreads 的应用程序。在每个线程中都有一个函数执行 malloc
。所以我的问题是:
1) 我能保证每个线程分配一个不同的、不重叠的内存块吗?
2) 是否可以从主线程(创建其他分配内存的线程)访问分配的内存?
我在 Windows 上使用 gcc 编译器,但我想知道 Windows 和 Linux 的答案。
谢谢
来自man malloc
:
+---------------------+---------------+---------+
| Interface | Attribute | Value |
+---------------------+---------------+---------+
| malloc(), free(), | Thread safety | MT-Safe |
| calloc(), realloc() | | |
+---------------------+---------------+---------+
malloc
& friends 是线程安全的,我觉得没什么好说的。因为它们都符合 C99,所以这适用于 Linux 和 Windows。
- POSIX 保证
malloc()
是 线程安全的 ,因为它可以同时在多个线程中使用。通常,malloc()
为此目的使用内部锁定。
- POSIX 保证一个进程有一个平面地址space。一个进程的多个线程共享一个 MMU 配置并可以访问相同的地址 space。在一个线程中分配的对象也可以从其他线程访问。
我正在用 c 编写一个使用 POSIX pthreads 的应用程序。在每个线程中都有一个函数执行 malloc
。所以我的问题是:
1) 我能保证每个线程分配一个不同的、不重叠的内存块吗?
2) 是否可以从主线程(创建其他分配内存的线程)访问分配的内存?
我在 Windows 上使用 gcc 编译器,但我想知道 Windows 和 Linux 的答案。
谢谢
来自man malloc
:
+---------------------+---------------+---------+
| Interface | Attribute | Value |
+---------------------+---------------+---------+
| malloc(), free(), | Thread safety | MT-Safe |
| calloc(), realloc() | | |
+---------------------+---------------+---------+
malloc
& friends 是线程安全的,我觉得没什么好说的。因为它们都符合 C99,所以这适用于 Linux 和 Windows。
- POSIX 保证
malloc()
是 线程安全的 ,因为它可以同时在多个线程中使用。通常,malloc()
为此目的使用内部锁定。 - POSIX 保证一个进程有一个平面地址space。一个进程的多个线程共享一个 MMU 配置并可以访问相同的地址 space。在一个线程中分配的对象也可以从其他线程访问。