malloc 的线程安全与不可重入性

malloc的线程安全

线程安全就是多个线程并发执行相同代码,程序的结果依然是正确的。malloc 由于操作的是堆上的空间,所以如果要实现线程安全,就需要对 malloc 加锁。

 

malloc 的不可重入性

可重入函数简单来说就是可以被中断的函数,在这个函数执行的任何时刻中断它,转入 OS 调度下去执行另外一段代码,执行完返回原函数时不会有错误。可重入的要求比线程安全高,可重入必定是线程安全的,但线程安全不一定可重入

如果在 malloc 的过程中发生了信号中断,而在信号处理程序中也需要执行 malloc :

  1. 如果 malloc 使用普通锁:直接就会发生死锁。
  2. 如果 malloc 使用递归锁:在信号处理程序中可以执行 malloc,但是可能会破坏共享的内存链表等信息。

 

tcmalloc 

tcmalloc (Thread-Caching Malloc)是 Google 开发的内存分配器,每个线程都有自己的缓存内存,所以在最佳的情况下,可以从 thread cache 中实现无锁内存分配内存释放

posted @ 2022-06-30 10:55  Kayden_Cheung  阅读(1898)  评论(0编辑  收藏  举报
//目录