只在Linux下查看了malloc的使用情况:

GCC版本4.6.1

libc-dev 3.0.0-14.23

//============================================================

libc中有非线程安全/线程安全两个版本malloc函数

下面的链接对此有描述,几年前的版本可能是这样的:

通过 -pthreads 选项可以明确指定在链接时是链接非线程安全的版本还是线程安全的版本。

http://stackoverflow.com/questions/987444/about-thread-safety-in-malloc-and-free

//============================================================

我使用的版本中已经没有-pthreads这个选项了,但更智能些:

会智能选择使用非线程安全/线程安全的malloc函数

//====================

测试结果:

只要使用了线程相关的函数,在编译后的文件中使用的malloc函数就是线程安全的版本。

(链接器不会考虑你是否真的启动了线程,或是否真的使用了那个线程)

//====================

即:在文件中引用了头文件#include<pthread.h>,编译时使用-lpthread选项,文件中使用了pthread_t定义变量,

但没有使用pthread_attr_init或pthread_createh函数,编译后的malloc函数就是非线程安全的。

//====================

但如果使用了pthread_attr_init或pthread_createh函数,编译后的malloc函数就是线程安全的。

即使你只是使用了一次pthread_createh(NULL,NULL,NULL,NULL);

//============================================================

我以前从没考虑过malloc是否是线程安全的这回事,反正就直接用了。

使用glibc时可以在官网上下载手册,如果函数是非线程安全的,在函数下面会有一行说明(好像只有很少几个是非线程安全的)。

虽然malloc下面没有说明,但我还是观察了一下,算是解开自己的疑惑吧。

//============================================================

End:)

http://www.cnblogs.com/tomren/archive/2011/12/24/2300602.html

malloc线程安全相关推荐

  1. linux malloc 线程,Linux上的侧线程的malloc/calloc崩溃

    我正在用C写一个服务器 - 客户端应用程序,共享一些信息.服务器以双线程模式工作 - 主线程等待输入,而侧线程响应客户端的请求.客户端也是这样工作的,但它等待用户输入(来自stdin),并且如果它接收 ...

  2. 简述Linux C下线程池的使用

    线程池也是多线程的处理方式.是将"生产者"线程提出任务添加到"任务队列",然后一些线程自动完成"任务队列"上的任务. 多线程编程,创建一个线 ...

  3. Linux系统编程——线程私有数据

    在多线程程序中.常常要用全局变量来实现多个函数间的数据共享.因为数据空间是共享的,因此全局变量也为全部线程共同拥有. 測试代码例如以下: #include <stdio.h> #inclu ...

  4. 【Linux系统编程】线程私有数据

    00. 目录 文章目录 00. 目录 01. 线程之间共享数据 02. 线程私有数据 2.1 创建线程私有数据 2.2 销毁线程私有数据 2.3 关联线程私有数据成员 2.4 读取线程私有数据所关联的 ...

  5. Linux中main是如何执行的

    Linux中main是如何执行的 这是一个看似简单的问题,但是要从Linux底层一点点研究问题比较多.找到了一遍研究这个问题的文章,但可能比较老了,还是在x86机器上进行的测试. 原文链接 开始 问题 ...

  6. Linux 下的 AddressSanitizer

    AddressSanitizer 是一个性能非常好的 C/C++ 内存错误探测工具.它由编译器的插桩模块(目前,LLVM 通过)和替换了 malloc 函数的运行时库组成.这个工具可以探测如下这些类型 ...

  7. 多线程编程指南 part 2

    多线程编程指南 Sun Microsystems, Inc. 4150 Network Circle Santa Clara, CA95054 U.S.A. 文件号码819–7051–10 2006 ...

  8. 【项目】实现一个mini的tcmalloc(高并发内存池)

    文章目录 tcmalloc 池化技术 内存池解决的问题 malloc的相关知识 玩具malloc原理简述 ptmalloc简述 铺垫 chunk 线程安全 小结 实现一个定长内存池 原理 代码 测试 ...

  9. Linux系统编程笔记

    文章目录 1.Linux系统编程 2.文件IO 2.1 文件描述符 2.2 open 2.3 perror 2.4 close 2.5 write 2.6 read 2.7 remove 2.8 系统 ...

最新文章

  1. C/C++二级指针概念及应用(有向图的邻接表(拓扑排序)、有向网图的邻接表、树的孩子表示)
  2. 【Linux】JDK+Eclipse 搭建C/C++开发环境
  3. 【Android】把Linux GCC安插在Android手机上
  4. 计算机视觉编程——多视图几何
  5. 【php内核与扩展开发系列】PHP生命周期---启动、终止与模式
  6. python全栈还是大数据好_青岛PYTHON全栈应用开发班
  7. 深入了解帆软报表系统的启动过程三
  8. Java基础之泛型的使用
  9. 百科园c语言题库13164,C语言题库-编程
  10. 正态分布的峰度和偏度分别为_关于偏度与峰度的一些探索
  11. matlab中分号、冒号、逗号等常用标点符号的作用
  12. vdagent与vdserver
  13. C++实现OPT最佳页面替换算法,结果简明扼要
  14. 笨方法学习Python 习题19 函数和变量 ---学习记录
  15. java缓存读写文件小例子
  16. 反射模式python
  17. 创业一年半的失败总结,什么样的团队能够创业成功
  18. Flutter Web(一)新建项目和登录页
  19. vnc下载,vnc下载软件是什么?哪个好用?
  20. Jetpack Compose助我快速打造电影App

热门文章

  1. 华为校园招聘Java机试题
  2. Eclipse4.8.0无法打开 Eclipse MarketPlace
  3. django请求与响应(HttpRequest对象和HttpResponse对象)
  4. 如何用Transformer来做目标检测?一文简述DERT及其变体
  5. 零基础入门人工智能有门槛吗?学会这些就够了
  6. 基于深度学习的多目标跟踪算法(上):端到端的数据关联
  7. 详解GAN的谱归一化(Spectral Normalization)
  8. 跑monkey需要安装什么_安装隔音吊顶需要注意什么 隔音吊顶材料推荐
  9. Spring Cloud Alibaba:Sentinel实现熔断与限流
  10. 关不关机 扫地机器人_【小米智能家居】米家扫拖机器人,模拟人工来回擦拖地!...