gpt4 book ai didi

c - 强制代码段在自定义 linux 内核系统调用中是原子的

转载 作者:太空狗 更新时间:2023-10-29 12:19:37 24 4
gpt4 key购买 nike

我一直在尝试实现一个一直给我带来问题的 linux system_call,我怀疑这是因为我的代码没有锁定(或者可能是抢占)。

我在一个非常频繁调用的函数中有一个关键部分(每次进行 system_call 时都会调用此自定义函数),它也由 system_calls 启动/停止。有什么方法可以确保每次在 linux 内核中进行任何系统调用时都会发生的这个关键段是不可抢占的,并且必须在其他任何事情发生之前完成执行?

最佳答案

如果我正确理解问题,最简单的方法是使用自旋锁:

#include <linux/spinlock.h>

static DEFINE_SPINLOCK(foo_lock);

int my_system_call(...)
{
...
/* critical section starts */
spin_lock(&foo_lock);
/* critical section goes here */
...
/* critical section ends */
spin_unlock(&foo_lock);
...
}

这样的关键部分将是不可抢占的,并且关键部分的并发执行不会重叠。

关于c - 强制代码段在自定义 linux 内核系统调用中是原子的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13839434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com