c - 编写原子函数

标签 c linux compiler-construction operating-system linux-kernel

我想用C语言实现一个原子函数,使进程或线程在执行函数时不会被抢占。

最佳答案

如果你在内核中并且你真的需要禁用抢占(可能不是一个好主意,我希望你知道你在做什么)你可以使用preempt_disable() preempt_enable()(有关详细信息,请参阅 Documentation/preempt-locking.txt)。

如果您在内核之外,您的选择将非常有限。大多数多进程或多线程应用程序所做的是创建它们在访问共享资源时用于 self 限制的互斥量。 (想想典型的读写锁。)但这对于系统上的所有其他进程来说绝不是原子的。对于遵循相同协议(protocol)的其他进程,它只是原子的。

(考虑到如今即使是 super 便宜的笔记本电脑也有多个同时运行的 CPU 内核,您在关键部分运行时阻止其他进程运行的目标注定要失败。)

可以为您的应用程序授予实时调度优先级,但这需要非常仔细的编程,因为优先级较低的程序(例如 X 或 ssh 或 bash 或..) 不会运行,除非让出处理器或执行阻塞 IO。有关详细信息,请参阅 sched_setscheduler(2)

关于c - 编写原子函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3245587/

相关文章:

c# - 由于对象的当前状态,操作无效

c - 你如何解析悬垂的其他东西?

c - 关于 _Bool 使用的 VS2013 编译问题

c - 使用 "EXTI_IRQHandler"和 "EXTI_Callback"有什么区别?

c - 当c中有多个用户时,如何存储有关用户的两条信息

c - 从消息队列接收

linux - 映射到虚拟地址空间的内核符号表——为什么?

linux - 有什么方法可以像在 python 中一样在 bash 上导入模块吗?

types - 类型错误和可判定性-编译器

gcc - 谁能解释一下 gcc 交叉编译器的命名约定?