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

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

迷茫
迷茫

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

répondre à tous(3)
大家讲道理


@dj Zheng Doujiu Je ne sais pas si cela est correct ou non. Il est conçu sur la base du débogage et ensuite la sortie est t au lieu d'un nœud. Je ne sais pas si tu exprimes aussi ce sens

阿神

L'enq simple donne l'impression que cela n'a rien à voir avec la concurrence, c'est juste l'établissement d'une liste doublement chaînée. La liste chaînée en Java n'est pas différente de celle en C++, sauf que Java encapsule le pointeur dans une référence, qui joue toujours le rôle de pointeur. Le
Le nœud t peut être considéré de manière abstraite comme le nœud précédent du nœud nouvellement inséré. Il est premier entré, premier sorti dans la file d'attente. Naturellement, le nouveau nœud est inséré à la fin de la file d'attente. donc Noeud t = queue. En ignorant la situation d'une file d'attente vide, si un nœud rejoint une file d'attente, le pré et le suivant du nouveau nœud doivent être traités en premier, donc node.pre = tail; node.next = null;. Pointez ensuite le prochain nœud précédent vers le nouveau nœud, c'est-à-dire le nœud, t.next = node. Ensuite, considérons la file d'attente vide. Ici, la file d'attente est initialisée de force avec un new Node() À ce moment, tail == head. Quant à ne pas insérer le nœud nouvellement inséré, je n'en comprends pas la raison. Intuitivement, compareAndSetHead(node) est plus normal.
Bien sûr, il ne modifie pas les valeurs pre et next directement comme une file d'attente à thread unique, mais est encapsulé dans la fonction comapreAndSet* Multi-thread. l’exclusion devrait être maintenue ici.

Peter_Zhu

Ha, vous ne pouvez probablement pas comprendre cette méthode enq maintenant. Si vous ne l'avez pas appris spécifiquement, je suppose que peu de gens peuvent la comprendre. L'apprentissage de la synchronisation sans verrouillage est une partie très avancée du multi-threading.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!