我记得我在 C语言中遇到了某些类型,称为原子类型,但我们从未研究过它们。
那么,它们与int
,float
,double
,long
等常规类型有何不同,它们的用途是什么?
原子类型是保证在单个指令中进行读取和写入的类型。来自gnu.org的更多说明:
24.4.7.2 原子类型
为了避免中断对变量的访问的不确定性,您可以使用访问总是原子的特定数据类型:sig_atomic_t
。读取和写入此数据类型保证在单个指令中发生,因此处理程序无法在访问的“中间”运行。
类型sig_atomic_t
始终是整数数据类型,但它是哪一个,以及它包含多少位,可能因机器而异。
数据类型:sig_atomic_t
这是整数数据类型。此类型的对象始终以原子方式访问。
实际上,您可以假设int
是原子的。您也可以假设指针类型是原子的;这非常方便。这两个假设在 GNU C 库支持的所有机器上以及我们知道的所有 POSIX 系统上都是正确的。
有关更多详细信息和一些 C11 特定的内容,请查看CppReference.com(无隶属关系)。
这是 IoS 机器的一个例子。@stackoverflow
Ed Cottrells 的答案很好,但是如果您想知道浮点数和双打整数和长数之间的区别。这些类型使用不同的字节大小 double floats 将 raddix 数据存储为小数。并且有符号使用两个补码向后存储负数,因此请尝试将有符号转换为无符号类型。Look up maxsize int long etc.
要真正使用原子类型,您需要知道为什么创建它们。对读写 Assembly 低级编码访问的需求与多核机器上的互斥锁信号量和多线程有关。
这个想法是两个进程不应该能够同时修改相同的数据。但是我听说当两个进程试图锁定一个内存位置或文件时会发生锁锁。所以在 linux 中有 NMI 看门狗被黑客攻击以扫描这些锁。在我的单核机器上我必须用 sudo sysctl kernel.nmi_watchdog = 0 禁用此
尝试了解更多信息
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(55条)