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

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

迷茫
迷茫

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

membalas semua(3)
大家讲道理


@dj Zheng Doujiu Saya tidak tahu sama ada ini betul atau tidak ia direka berdasarkan nyahpepijat dan kemudian outputnya ialah t dan bukannya nod. tidak tahu jika anda juga menyatakan maksud ini

阿神

Enq mudah terasa seperti tiada kaitan dengan konkurensi, ia hanyalah penubuhan senarai berganda. Senarai terpaut di Java tidak berbeza daripada yang di C++, kecuali Java merangkum penunjuk ke dalam rujukan, yang sebenarnya masih memainkan peranan penunjuk.
Nod t boleh dilihat secara abstrak sebagai nod sebelumnya bagi nod yang baru dimasukkan Nod pertama masuk, keluar dahulu dalam baris gilir. jadi Nod t = ekor. Mengabaikan situasi baris gilir kosong, jika nod bergabung dengan baris gilir, pra dan seterusnya nod baharu mesti diproses terlebih dahulu, jadi node.pre = ekor;. Kemudian halakan nod seterusnya seterusnya ke nod baharu, iaitu, nod, t.next = nod. Seterusnya, pertimbangkan baris gilir kosong. Di sini, baris gilir dimulakan secara paksa dengan Node() baharu Pada masa ini, ekor == kepala. Bagi tidak memasukkan nod yang baru dimasukkan, saya tidak faham sebab ini secara intuitif, compareAndSetHead(node) adalah lebih biasa.
Sudah tentu, ia tidak mengubah nilai pra dan seterusnya secara langsung seperti baris gilir satu utas, tetapi dirangkumkan ke dalam fungsi comapreAndSet* pengecualian harus dikekalkan di sini.

Peter_Zhu

Ha, anda mungkin tidak dapat memahami kaedah enq itu sekarang Jika anda belum mempelajarinya secara khusus, saya rasa tidak ramai yang dapat memahaminya. Mempelajari penyegerakan tanpa kunci adalah bahagian yang sangat maju dalam pelbagai benang.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan