0

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

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

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

4

3 回答 3

2

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

于 2009-10-23T09:40:10.223 回答
1

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

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

或者

使用英特尔 TBB

或者

使用ACE_Atomic_Op

于 2009-10-23T14:20:07.963 回答
1

我知道这是题外话,但如果你打算编写无锁代码,你肯定应该阅读第一个无锁代码: Herb Sutter的虚假安全感

引用文章:

无锁代码有两个主要缺点。首先,它对于解决典型问题没有广泛的用途——许多基本的数据结构,甚至是双向链表,仍然没有已知的无锁实现。提出一种新的或改进的无锁数据结构仍然可以让你至少获得一篇在参考期刊上发表的论文,有时还可以获得学位。

于 2009-10-23T13:42:03.317 回答