当前位置: 首页 > 面试题库 >

Linux和GCC 4中的C ++新操作员线程安全性

甘学潞
2023-03-14
问题内容

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

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

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

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

如果不是,克服此 问题 的最佳方法是什么?也许将每个呼叫锁定到新接线员?


问题答案:

您将很难看起来很难找到一个支持线程但没有线程安全的平台new。实际上,new(和malloc)的线程安全性是它这么慢的原因之一。

另一方面,如果您想要线程安全的STL,则可以考虑使用具有线程感知容器的Intel
TBB
(尽管并非所有对容器的操作都是线程安全的)。



 类似资料:
  • 问题内容: 如果您在同一文件描述符中的两个不同线程中调用(或,或两者兼有)会发生什么情况(让我们说我们对本地文件感兴趣,而这是套接字文件描述符),而没有显式使用同步机制? 读取和写入是系统调用,因此,在一个单核CPU上,不幸的是两次读取将“同时”执行。但是有多个核心… linux内核会做什么? 让我们更笼统一点:其他内核(例如BSD)的行为是否总是相同? 编辑:根据密切的文档,我们应该确保文件描述

  • 问题内容: 在Linux上是否使用线程安全写入stdout ?使用下级命令怎么办? 问题答案: 它不是C标准指定的-取决于您对C标准库的实现。实际上,C标准甚至根本没有提到线程,因为某些系统(例如嵌入式系统)没有多线程。 在GNU实现()中,stdio中处理对象的大多数高级函数都是线程安全的。通常没有名字的(例如)。但是,线程安全性处于每个函数调用级别:例如,如果您多次调用,则保证每个调用都是原子

  • 我只是一个非开发人员,所以我的问题可能非常简单! 我只是在测试Java多线程的东西,这不是真正的代码。我想知道如何在 Java 中同时更新两个成员变量,以防我们希望它们都同步。举个例子: 在这种情况下(当然,想象一下多线程),我希望能够保证对< code>items和< code>itemToStatus的任何读取总是返回相同的结果。 因此,如果代码在< code>itemToStatus.put

  • 本文向大家介绍C++ 线程安全信号,包括了C++ 线程安全信号的使用技巧和注意事项,需要的朋友参考一下 示例 C ++ 11 C ++ 11标准保证以同步方式初始化函数作用域对象的初始化。这可以用于通过延迟初始化实现线程安全的单例。

  • 关于一次从多个线程访问局部变量的几个问题: > < li> 我有多个线程写入和读取变量值,我是否应该同步访问它? 变量每隔几秒钟从 Thread1 更新一次,每隔几秒钟从 Thread2 读取和更新到数据库。 如果我没有任何逻辑并且没有任何并发问题,会出现哪些问题? 我应该为此使用volatile吗? 编辑: 我想强调的是,我没有任何并发问题。这是我的具体方案: 一个。我的变量名称是 ,它测量 p

  • 问题内容: 如果我使用fopen()调用来在多线程中打开同一文件,然后将数据写入该文件。我是否应该使用互斥锁来确保数据不会混乱? 问题答案: 如果两个线程都使用来打开同一文件,则它们各自将具有独立的文件流(),并由引用同一文件的独立文件描述符支持。您可以独立地写入两个文件流,但是文件的最终结果将取决于线程在何处写入以及何时刷新文件流。除非您控制每个线程的写入位置,否则结果是不可预测的。最简单的事情