1

Linux カーネルの attach_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 のようにポインタを直接設定しない理由がわかりません。task->pids をリンク変数にコピーし、リンク変数を再度読み取るのはなぜですか? ポインターを変数にコピーして間接的に読み取るコードを多数見つけました。

同期の問題がありますか、それともコードの読み取りに適していますか?

4

1 に答える 1

1

おそらく、&task->pids[type]後で hlist_add_head_rcu() を呼び出すときに再度参照解除する必要がなくなるだけです。しかし、スマート コンパイラはこれを単独で実行できるはずです。

于 2013-01-15T05:11:24.970 に答える