Linux kernel 为什么要将指针复制到变量中并重新读取?

Linux kernel 为什么要将指针复制到变量中并重新读取?,linux-kernel,Linux Kernel,我正在阅读linux内核中的附加pid函数。 其代码如下: { struct pid_link *link; link = &task->pids[type]; link->pid = pid; hlist_add_head_rcu(&link->node, &pid->tasks[type]); } 我不明白为什么它不直接这样设置指针:task->pids[type]->pid=pid。 为什么它会将任务->P

我正在阅读linux内核中的附加pid函数。 其代码如下:

{
    struct pid_link *link;

    link = &task->pids[type];
    link->pid = pid;
    hlist_add_head_rcu(&link->node, &pid->tasks[type]);
}
我不明白为什么它不直接这样设置指针:task->pids[type]->pid=pid。 为什么它会将任务->PID复制到链接变量中并再次读取链接变量? 我发现许多代码将指针复制到变量中并进行间接读取


它是否存在同步问题,或者是否有利于代码读取?

调用hlist\u add\u head\u rcu()时,可能只会避免我们再次取消对
&task->pids[type]
的引用。但是,智能编译器应该能够自己完成这项工作。

也许可以避免我们在调用hlist\u add\u head\u rcu()时再次取消对
&task->pids[type]
的引用。但是,智能编译器应该能够自己做到这一点