我在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中的进程不同?
如果有竞争条件,我应该如何锁定它?
答案 0 :(得分:0)
unsigned char *pt;
是一个局部变量,它不被共享,因为每个进程都有自己的系统调用堆栈。它们共享相同的代码,但它运行在不同的堆栈上。
所以不,如果你坚持局部变量,你就不需要任何锁定,也不会冒任何数据竞争的风险。