这是最近的 gcc 手册中关于原子操作支持的类型的引用。
四个非算术函数(加载、存储、交换和比较交换)也都有一个通用版本。这个通用版本适用于任何数据类型。如果数据类型大小映射到可能具有无锁支持的整数大小之一,则通用版本使用无锁内置函数。否则,将在运行时解决外部调用。这个外部调用的格式相同,只是添加了一个“size_t”参数作为第一个参数插入,指示被指向对象的大小。所有对象的大小必须相同。
原始文件在这里gcc 4.8.1。我假设硬件只能对简单的 32、64 和偶尔的 128 位类型执行原子操作。那么,这些带有指针的函数的通用版本会发生什么?只有对指针的访问实际上可以是原子的,对吧?
另一个相关的问题是这些原子如何在像 java 这样的语言中工作?原子访问什么,值还是引用?