【发布时间】:2014-12-13 23:33:50
【问题描述】:
我在 Linux 中实现了一个新的系统调用:
void do_test(unsigned char *input, unsigned char *output){
unsigned char *pt;
// do something complex with pt;
}
do_test 系统调用由 Linux 中运行的许多进程调用。
我是否应该担心多个进程对共享变量*pt 存在竞争条件(即处于不一致状态)?还是每个进程都有自己的内核代码版本,所以进程 A 中使用的*pt 与进程 B 中的不一样?
如果有竞态条件,我应该如何锁定它?
【问题讨论】:
-
修改代码以将指针传递给函数。事实上, *pt 没有被设置为任何东西。建议: void do_test( unsigned char *pt) {... }
-
出于好奇,新系统要求什么?
-
我编辑了问题以显示系统调用将用户提供的输入与一些内部内核状态相结合。例如,它使用其私钥对用户输入进行签名。
-
pt指向什么? -
"对于共享变量" - 我没有看到任何共享变量。我看到了一个局部变量。
标签: c linux-kernel operating-system kernel