我想用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/