什么是C语言中的原子类型?

时间:2016-04-30 14:08:15

标签: c types

我记得我在C语言中遇到过某些叫做原子类型的类型,但我们从未研究过它们。

那么它们与intfloatdoublelong等常规类型有何区别?它们的用途是什么?

2 个答案:

答案 0 :(得分:5)

原子类型是指保证在单个指令中进行读写的原子类型。来自gnu.org的更多解释:

  

24.4.7.2原子类型

     

为避免中断访问变量的不确定性,您可以   使用访问始终为原子的特定数据类型:   sig_atomic_t。保证读取和写入此数据类型   发生在一条指令中,因此处理程序无法运行   访问的“中间”。

     

类型sig_atomic_t始终是整数数据类型,但它是哪一个   is,以及它包含多少位,可能因机器而异。

     

数据类型: sig_atomic_t
  这是一个整数数据类型。对象   类型总是以原子方式访问。

     

在实践中,您可以假设int是原子的。你也可以假设   指针类型是原子的;这很方便。这两个假设都适用于GNU C Library支持的所有机器以及我们所知道的所有POSIX系统。

有关更多细节和某些特定于C11的内容,请查看CppReference.com(无关联)。

答案 1 :(得分:0)

这里是IoS机器的答案。 @stackoverflow

Ed Cottrells的回答很好,但是如果您想知道float和double以及int和long之间的区别是什么。这些类型使用不同的字节大小,双精度浮点数将raddix数据存储为小数。带符号的使用2的补码向后存储负数,因此请尝试将带符号的类型转换为无符号类型。 Look up maxsize int long etc.

要真正使用原子类型,您需要知道为什么创建原子类型。对读写程序集低级代码访问的需求与多核计算机上的Mutex锁信号和多线程有关。

这个想法是两个进程不能同时修改同一数据。但是我听说,当两个进程试图锁定一个内存位置或文件时,就会发生锁定。因此,在Linux中,有NMI看门狗被黑客入侵以扫描这些锁。在我的单核计算机上,我必须使用sudo sysctl kernel.nmi_watchdog = 0禁用它。

请尝试维基百科以获取更多信息