私は、Javascript 逆単一リンク リストの実装に取り組んでいます。つまり、リンクされたリストは、次へのリンクなどを含む head オブジェクトを格納する変数によって参照される代わりに、リストの最後のノードを参照する末尾の変数に格納され、それぞれにリンクが含まれます前のノードへ。実装の要点は次のとおりです。
// A reversed linked list of the sequence 1, 2, 3
var tail = {
value: 3,
previous: {
value: 2,
previous: {
value: 1,
previous: null
}
}
};
このリスト ( tail
) の最後に新しいノードをプッシュするコードは次のようになります。
tail = {
value: 4,
previous: tail
};
ここにデモがあります:http://jsbin.com/ajixip/1/
このプッシュで予測される問題は、現在の値の取得とtail
新しい値の設定の間に発生する競合状態です。
たとえば、ユーザーが新しい値をリストの最後にプッシュするイベントをトリガーしたとします。tail の値が取得されてキーに割り当てられた時刻をprevious
Time Aと呼び、 tail が新しいオブジェクトTime Bに設定された時点を呼び出しましょう。Time AとTime Bの間にリストに対して別のプッシュが行われた場合、それprevious
はTime Aのテールであり、 Time Bの後にテールに割り当てられると仮定すると、最初のノードのプッシュは失われます。
このような競合状態をどのように回避できるのか、私は困惑しています。私が最初に考えたのは、同時プッシュを防止するロックを実装することでしたが、これを回避する賢い JS ウィザードがおそらくあるでしょう。この魔法の一部を分かち合いたい魔法使いはいますか?
ありがとう!