运行时检测处理器类型 - 原子操作

时间:2009-10-23 09:35:31

标签: c++ multithreading visual-c++ visual-c++-2008

我正在实现一些速度关键的多线程代码。如果我确定某些基本的写操作是原子的,我可以避免使用一些关键部分。我刚读了一篇学术论文,其中我看到了以下内容:

“大小为t,int,float和pointer的基本类型的写入必须是原子的。一个线程的写入必须由其他线程以相同的顺序查看。使用的IA-32和Intel-64 CPU架构在大多数现代标准计算机中,保证这些假设。“

我想要做的是能够在运行时检测处理器是否属于这些操作是原子的类型。 - 我也希望这适用于AMD处理器。

3 个答案:

答案 0 :(得分:2)

这听起来多余。 .EXE可能只是int main() { return true; }。它运行,答案是正确的,或者操作系统根本无法运行.EXE,因为处理器类型与.EXE类型不匹配。

答案 1 :(得分:1)

我知道这不是主题,但如果您打算编写无锁代码,您应该首先阅读Herb Sutter的Lock-Free Code: A False Sense of Security

引用文章:

  

无锁代码有两大特色   缺点。首先,它并不广泛   对解决典型问题很有用   问题 - 许多基本数据   结构,甚至是双重链表,   仍然没有已知的无锁   实现。想出一个新的   或改进的无锁数据结构   仍将至少为你赢得一个   在一篇评审期刊上发表的论文,   有时甚至是学位。

答案 2 :(得分:1)

为避免涉及这些CPU /平台特定问题,您可以考虑:

在c ++ 0x标准中等待std :: atomic(已经可用于GCC)

使用Intel TBB

使用ACE_Atomic_Op