并发 - 关于Java AbstractQueuedSynchronizer 类的enq 方法
迷茫
迷茫 2017-04-18 10:28:37
0
3
786

高手好,这几天研究AbstractQueuedSynchronizer 底层遇到一个问题,如图 上面有个一个关于 enq进入队列问题
然后自己想画一下这个双向链表可是不知道如何画 因为head与t是同一个对象 然后tail 与 node同一个对象 不知道该怎么画,请高手帮忙看下 在此谢过

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(3)
大家讲道理


@dj Zheng Doijiu これが正しいかどうかはわかりませんが、デバッグに基づいて設計されており、正しい出力はノードではなく t です。この意味も表現しているかどうかはわかりません。

いいねを押す +0
阿神

純粋な enq は同時実行とは何の関係もなく、単に二重リンクリストを確立しているだけのように感じます。 Java のリンク リストは、Java がポインタを参照にカプセル化し、実際には依然としてポインタの役割を果たしている点を除いて、C++ のリンク リストと変わりません。
ノード t は、キューに先入れ先出しされる、新しく挿入されたノードの前のノードとして抽象的に見ることができます。当然、新しいノードはキューの最後に挿入されるため、ノード t = tail となります。 。空のキューの状況を無視すると、ノードがキューに参加する場合、新しいノードの前と次が最初に処理される必要があるため、node.pre = tail;node.next = null;。次に、前のノードの次を新しいノード、つまりノード t.next = node にポイントします。次に空のキューを考えます。このとき、tail == headでキューが強制的に初期化されます。新しく挿入したノードを挿入しないことについては、直感的には compareAndSetHead(node) の方が普通です。 もちろん、シングルスレッドキューのように pre と next の値を直接変更するわけではありませんが、ここでは comapreAndSet
* 関数にカプセル化されています。

いいねを押す +0
Peter_Zhu

ああ、その enq メソッドは今は理解できないでしょう。具体的に学習していなければ、理解できる人はほとんどいないと思います。ロックフリー同期の学習は、マルチスレッドの非常に高度な部分です。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!