当前位置:  开发笔记 > 运维 > 正文

有没有办法在C中使函数成为原子?

如何解决《有没有办法在C中使函数成为原子?》经验,为你挑选了1个好方法。

有没有办法在C中创建一个原子函数.

我不是在寻找便携式解决方案.(平台寻找 - Win,Linux)



1> RBerteig..:

也许.

这完全取决于你对"原子"的定义.

在单核,深度嵌入式环境中,如果不涉及操作系统,通常可以禁用和启用中断.这可以用于允许函数对中断处理程序代码是原子的.但是如果你有一个多主总线,一个DMA引擎,或者一些可以独立写入内存的硬件设备,那么在某些情况下甚至屏蔽中断可能无法提供足够强大的保证.

在RTOS(实时操作系统)环境中,OS内核通常提供低级同步原语,例如关键部分.关键部分是代码块,其"基本上"原子地行为,至少相对于所有其他关键部分.它通常是操作系统实现其他同步原语的基础.

在多核环境中,通常可以使用称为自旋锁的低级原语.它用于防止进入相对于同一螺旋锁对象的其他用户必须是原子的代码块,并通过在紧密循环中阻塞等待CPU核心直到锁被释放(因此名称)来操作.

在许多线程环境中,线程框架提供了更复杂的原语,如事件,信号量,互斥量和队列.它们与线程调度程序协作,以便等待发生某事的线程在满足条件之前根本不运行.这些可用于使函数的动作相对于共享同一同步对象的其他线程具有原子性.

一般规则是使用适合该任务的环境中可用的最高级别功能.在最好的情况下,可以使用现有的线程安全对象(如消息队列)来避免在代码中执行任何特殊操作.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有