Jan*_*sky 24 c++ malloc multithreading openmp
我很好奇,如果两个线程同时请求分配内存,是否存在内存分配锁定.我正在使用OpenMP来执行多线程,C++代码.
操作系统:主要是Linux,但也想了解Windows和Mac.
默认情况下,Windows在您使用Win API堆函数时会锁定堆.
您可以至少在创建堆时控制锁定.不同的编译器和C运行时使用malloc/free系列做不同的事情.例如,SmartHeap API在某一点上为每个线程创建了一个堆,因此不需要锁定.还有配置选项可以打开和关闭该行为.
在90年代早期/中期的某个时刻,Borland Windows和OS/2编译器明确地关闭了堆锁(一个过早的优化错误),直到使用beginthread启动了多个线程.许多人试图用OS API调用生成线程,然后当堆损坏自己到地狱时感到很惊讶......
http://en.wikipedia.org/wiki/Malloc
现代malloc实现尝试通过为每个线程保持单独的"竞技场"来尽可能无锁.
免费商店是共享资源,必须同步.分配/解除分配成本很高.如果您是多线程的性能,那么频繁的分配/释放可能会成为瓶颈.作为一般规则,避免紧密循环内的分配/释放.另一个问题是虚假分享.
| 归档时间: |
|
| 查看次数: |
9609 次 |
| 最近记录: |