sys/queue.hには、データ構造TAILQが定義されています。 Linuxカーネル全体で広く普及しています。その定義は、このようなものです:以前のノードを指していないTAILQのtqe_prevの目的を熟考
私は少し、このコードで困惑しています#define TAILQ_ENTRY(type) \
struct { \
struct type *tqe_next; /* next element */ \
struct type **tqe_prev; /* address of previous next element */ \
}
:前のノードのtqe_nextを指しtqe_prev持つことの利点は何ですか?それが私だったら、次のノードを指すtqe_nextと同様に、直前のノードを直接指し示すtqe_prevを持っていました。
私はノードを挿入するときにポインタを直接操作して更新することを考えているので、最初にノードを所有する必要はありません。しかし、それは?その他の利点は?
私はキューの後ろをどのように移動できるのでしょうか?ノードへのポインタがある場合、そのtqe_prevは前のノードを指していないので、先頭までキューを通過する方法はありません。または、そのような後方移動はTAILQによってサポートされていない設計によるものですか?
作成者のみがわかっていますが、これがパフォーマンスの向上であるという合理的な前提です(前の次のものを更新するための余分なレベルの間接化を排除します)。あなたの第2のポイントに関しては、待ち行列は本質的に円形であることが多いので、後退する必要はありません。 –