Rumah  >  Soal Jawab  >  teks badan

并发 - 关于Java AbstractQueuedSynchronizer 类的enq 方法

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

迷茫迷茫2761 hari yang lalu791

membalas semua(3)saya akan balas

  • 大家讲道理

    大家讲道理2017-04-18 10:30:37


    @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

    balas
    0
  • 阿神

    阿神2017-04-18 10:30:37

    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.

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:30:37

    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.

    balas
    0
  • Batalbalas