首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux 4中的C++新操作符线程安全

linux 4中的C++新操作符线程安全
EN

Stack Overflow用户
提问于 2009-04-28 03:22:05
回答 4查看 13.1K关注 0票数 15

不久,我将开始研究使用共享内存的网格细化算法的并行版本。

这所大学的一位教授指出,我们必须非常小心线程安全,因为编译器和stl都不知道线程。

我搜索了这个问题,答案取决于编译器(有些尝试稍微了解线程)和平台(如果编译器使用的系统调用是线程安全的还是不安全的)。

那么,在linux中,gcc 4编译器会为新操作符生成线程安全代码吗?

如果没有,克服这个问题的最好办法是什么?或者把每个电话都锁定到新接线员那里?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-04-30 00:43:57

您必须非常努力地寻找一个支持线程但没有线程安全new的平台。事实上,new (和malloc)的线程安全是它如此缓慢的原因之一。

另一方面,如果您想要一个线程安全的STL,您可以考虑英特尔TBB,它具有线程感知容器(尽管并不是对它们的所有操作都是线程安全的)。

票数 19
EN

Stack Overflow用户

发布于 2009-04-28 03:26:26

通常,new操作符是线程安全的--但是对STL调用的线程安全保证和标准库受标准的控制--这并不意味着它们是线程不知道的--它们往往对某些操作的线程安全有非常好的定义保证。例如,以只读方式迭代列表对于多个读者来说是线程安全的,而迭代列表和进行更新则不是安全的。您必须阅读这些文档,看看各种保证是什么,尽管它们并不繁重,而且往往是有意义的。

票数 8
EN

Stack Overflow用户

发布于 2009-04-28 04:15:10

虽然我说的是我没有使用的概念,但我觉得我应该提到,如果您使用的是共享内存,那么您很可能希望确保只使用POD类型,并使用新位置。

其次,如果您使用共享内存(通常理解为linux系统上的共享内存),那么您可能使用多个进程--而不是线程--分配内存和“做事情”--使用共享内存作为通信层。如果是这样的话,那么应用程序和库的线程安全并不重要-但是,重要的是使用共享内存分配的任何东西的线程安全!这与使用多个线程运行一个进程不同,在这种情况下,询问新操作符的线程安全性是一个有效的问题,如果不是,可以通过放置new或定义自己的分配器来解决。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/796099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档