首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言中的原子类型是什么?

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

Stack Overflow用户
提问于 2016-04-30 22:08:15
回答 2查看 22.2K关注 0票数 14

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

那么,它们与intfloatdoublelong等常规类型有什么不同,它们的用途是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-30 22:15:45

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

24.4.7.2原子类型

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

类型sig_atomic_t始终是整数数据类型,但它是哪种类型以及它包含的位数可能因机器而异。

数据类型:sig_atomic_t

这是整型数据类型。这种类型的对象总是以原子方式访问的。

在实践中,您可以假设int是原子的。您还可以假设指针类型是原子类型;这非常方便。这两个假设在GNU C库支持的所有计算机和我们所知的所有POSIX系统上都是正确的。

有关更多细节和一些C11特定的内容,请查看CppReference.com (无从属关系)。

票数 17
EN

Stack Overflow用户

发布于 2018-11-21 18:15:03

这是一个关于IoS机器的答案。@stackoverflow

Ed Cottrells的回答很好,但是如果你想知道浮点型和双精度型之间的区别,整型和长整型之间的区别。这些类型使用不同的字节大小,双浮点数存储小数的raddix数据。并且有符号的存储负数使用2的补码,所以尝试将有符号的类型转换为无符号的类型。Look up maxsize int long etc.

要真正使用原子类型,您需要知道创建它们的原因。读写汇编低级编码访问的需要与多核机器上的互斥锁信号量和多线程有关。

这个想法是两个进程不应该能够同时修改相同的数据。但我听说过,当两个进程试图锁定一个内存位置或文件时,就会发生锁定。所以在linux中,NMI watchdog被黑客用来扫描这些锁。在我的单核机器上,我必须用sudo sysctl kernel.nmi_watchdog=0禁用它。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36955884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档