国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Jadual Kandungan
????Kunci bas?? ?? ?? " > ????Kunci bas?? ?? ??
Rumah Java JavaSoalan temu bual Novis juga boleh bersaing dengan penemuduga BAT: CAS

Novis juga boleh bersaing dengan penemuduga BAT: CAS

Aug 24, 2023 pm 03:09 PM
soalan temuduga java

Kata Pengantar

Bahagian tambahan siri pengaturcaraan serentak JavaC A S (Banding dan tukar), gaya artikel masih penuh dengan gambar dan teks, mudah difahami, membolehkan pembaca berdialog gila dengan penemuduga. C A S(Compare and swap),文章風(fēng)格依然是圖文并茂,通俗易懂,讓讀者們也能與面試官瘋狂對線。

C A S作為并發(fā)編程必不可少的基礎(chǔ)知識,面試時C A S也是個高頻考點(diǎn),所以說C A S是必知必會,本文將帶讀者們深入理解C A S

C A S code>Sebagai pengetahuan asas penting tentang pengaturcaraan serentak, semasa temu duga<code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px; margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: " operator mono consolas monaco menlo monospace break-all rgb>C A S juga merupakan tapak ujian frekuensi tinggi, jadi C A S mesti diketahui, artikel ini akan memberi pembaca pemahaman yang mendalamC A S. ??

Outline

Novis juga boleh bersaing dengan penemuduga BAT: CAS

Konsep asas C A S

C A S(compareAndSwap)也叫比較交換,是一種無鎖原子算法,映射到操作系統(tǒng)就是一條cmpxchg硬件匯編指令(保證原子性),其作用是讓C P U將內(nèi)存值更新為新值,但是有個條件,內(nèi)存值必須與期望值相同,并且C A SOperasi tidak memerlukan pertukaran antara mod pengguna dan mod kernel, dan memori dibaca dan ditulis terus dalam mod pengguna (nomeanthreads) penukaran konteks).

它包含3個參數(shù)<code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color : rgba(27, 31, 35, 0.05);font-family: " operator mono consolas monaco menlo monospace break-all rgb> C A S(V,E,N),V表示待更新的內(nèi)存值,E表示預(yù)期值,N表示新值,當(dāng) V值等于E值時,才會將V值更新成N值,如果V值和E值不等,不做更新,這就是一次C A S的操作。3個參數(shù)C A S(V,E,N)V表示待更新的內(nèi)存值,E表示預(yù)期值,N表示新值,當(dāng) V值等于E值時,才會將V值更新成N值,如果V值和E值不等,不做更新,這就是一次C A S的操作。

Novis juga boleh bersaing dengan penemuduga BAT: CAS

簡單說,C A S

Novis juga boleh bersaing dengan penemuduga BAT: CAS

簡單詵,C A S?象的那樣,說明它已經(jīng)被別人修改過了,你只需要重新讀取,設(shè)置新期望值,再次嘗試修改就好了。??

Bagaimana C A S memastikan atomicity

Atomicity bermakna satu atau lebih operasi berada dalam C P U ciri yang tidak boleh diganggu semasa pelaksanaan. Ia sama ada dilaksanakan atau tidak dilaksanakan dan tidak boleh dilaksanakan di tengah (satu yang tidak boleh diganggu atau urutan operasi). C P U執(zhí)行的過程中不被中斷的特性,要么執(zhí)行,要不執(zhí)行,不能執(zhí)行到一半(不可被中斷的一個或一系列操作)。

為了保證C A S的原子性,C P U提供了下面兩種方式

  • 總線鎖定
  • 緩存鎖定

總線鎖定

總線(B U S)是計算機(jī)組件間的傳輸數(shù)據(jù)方式,也就是說C P U與其他組件連接傳輸數(shù)據(jù),就是靠總線完成的,比如C P U

Untuk memastikan rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(255, 100, 65);">Atomicity C A S , C P U menyediakan dua kaedah berikut??
  • Kunci bas
  • Kunci cache
  • ul>

    ????Kunci bas?? ?? ??

    ??Bas (B U S) ialah kaedah penghantaran data antara komponen komputer, iaituC P U menyambung dengan komponen lain untuk menghantar data, yang dilakukan dengan bas, seperti C P U membaca dan menulis memori. ??
    Novis juga boleh bersaing dengan penemuduga BAT: CAS

    總線鎖定是指C P U使用了總線鎖,所謂總線鎖就是使用C P U提供的LOCK#信號,當(dāng)C P U在總線上輸出LOCK#信號時,其他C P U的總線請求將被阻塞。C P U使用了總線鎖,所謂總線鎖就是使用C P U提供的LOCK#信號,當(dāng)C P U在總線上輸出LOCK#信號時,其他C P U的總線請求將被阻塞。

    Novis juga boleh bersaing dengan penemuduga BAT: CAS

    緩存鎖定

    總線鎖定方式雖然保證了原子性,但是在鎖定期間,會導(dǎo)致大量阻塞,增加系統(tǒng)的性能開銷,所以現(xiàn)代C P U為了提升性能,通過鎖定范圍縮小的思想設(shè)計出了緩存行鎖定(緩存行是C P UNovis juga boleh bersaing dengan penemuduga BAT: CAS

    緩存鎖定

    ??總線鎖定方式雖然保證了原子性,但是在鎖定期間,會導(dǎo)致大量阻塞,增加的是系現(xiàn)代C P U為了提升性能,通過鎖定范圍縮小的思想設(shè)了玡凓緩存行是C P U高速緩存存儲的最小單位??)。??

    Apa yang dipanggil kunci cache merujuk kepada C P U mengunci C P U緩存行進(jìn)行鎖定,當(dāng)緩存行中的共享變量回寫到內(nèi)存時,其他C P U會通過總線嗅探機(jī)制感知該共享變量是否發(fā)生變化,如果發(fā)生變化,讓自己對應(yīng)的共享變量緩存行失效,重新從內(nèi)存讀取最新的數(shù)據(jù),緩存鎖定是基于緩存一致性機(jī)制來實現(xiàn)的,因為緩存一致性機(jī)制會阻止兩個以上C P U同時修改同一個共享變量(現(xiàn)代C P U基本都支持和使用緩存鎖定機(jī)制)。

    C A S的問題

    C A S和鎖都解決了原子性問題,和鎖相比沒有阻塞、線程上下文你切換、死鎖,所以C A S要比鎖擁有更優(yōu)越的性能,但是C A S同樣存在缺點(diǎn)。

    C A Sgaris cache

    , dan apabila pembolehubah yang dikongsi dalam baris cache ditulis kembali ke ingatan, C P U akan mengesan sama ada pembolehubah kongsi telah berubah melalui mekanisme menghidu bas. Jika ia perubahan, biarkan dirinya Baris cache pembolehubah kongsi yang sepadan adalah tidak sah dan data terkini dibaca dari memori sekali lagi Penguncian cache dilaksanakan berdasarkan mekanisme ketekalan cache, kerana mekanisme ketekalan cache akan menghalang lebih daripada dua C P UUbah suai pembolehubah kongsi yang sama secara serentak (??ModenC P UPada asasnya semua Menyokong dan menggunakan mekanisme penguncian cache ??). ??<h1 data-tool="mdnice editor" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 24px;"> <span style="display: none; "></span>Masalah C A S</h1>??<code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px; margin- kiri: 2px;warna latar belakang: rgba(27, 31, 35, 0.05);fon-family: " operator mono consolas monaco menlo monospace break-all rgb>C A S dan kunci kedua-duanya menyelesaikan masalah atomicity. Berbanding dengan kunci, tiada penyekatan, penukaran konteks benang dan kebuntuan, jadi C A Smempunyai prestasi yang lebih baik daripada kunci, tetapiC A SSama Terdapat kekurangan. ????C A S Masalah dengan kod> adalah seperti berikut??. ;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(255, 100, 65);">ABASoalan

    Hanya satu pembolehubah kongsi boleh dijamin operasi Atom

    C A S hanya boleh digunakan untuk satu pembolehubah kongsi. Jika terdapat berbilang pembolehubah dikongsi, anda hanya boleh menggunakan kunci. Sudah tentu, jika anda Terdapat cara untuk menyepadukan berbilang pembolehubah ke dalam satu pembolehubah, menggunakan C A S juga bagus, contohnya dalam kunci baca-tulisBit keadaan tinggi dan rendah.

    Masa putaran terlalu lama

    Apabila benang gagal memperoleh kunci, ia tidak menyekat dan menggantung, tetapi cuba memperoleh semula selepas tempoh masa ini sehingga ia berjaya jenis pemerolehan gelung Mekanisme ini dipanggil kunci putaran (kunci putaran). spinlock

    )。

    自旋鎖好處是,持有鎖的線程在短時間內(nèi)釋放鎖,那些等待競爭鎖的線程就不需進(jìn)入阻塞狀態(tài)(無需線程上下文切換/無需用戶態(tài)與內(nèi)核態(tài)切換),它們只需要等一等(自旋),等到持有鎖的線程釋放鎖之后即可獲取,這樣就避免了用戶態(tài)和內(nèi)核態(tài)的切換消耗。

    自旋鎖壞處顯而易見,線程在長時間內(nèi)持有鎖,等待競爭鎖的線程一直自旋,即CPU一直空轉(zhuǎn),資源浪費(fèi)在毫無意義的地方,所以一般會限制自旋次數(shù)。

    最后來說自旋鎖的實現(xiàn),實現(xiàn)自旋鎖可以基于C A S實現(xiàn),先定義lockValue對象默認(rèn)值1,1代表鎖資源空閑,0

    Kelebihan kunci putaran ialah benang yang memegang kunci melepaskan kunci dalam masa yang singkat, dan benang yang menunggu kunci bersaing tidak perlu memasuki keadaan menyekat (??Tidak perlu penukaran konteks benang/Tidak perlu mod pengguna dan penukaran mod kernel ), mereka hanya perlu menunggu (??spin) sehingga benang yang menahan kunci melepaskan kunci sebelum mereka boleh memperolehnya, sekali gus mengelakkan penggunaan bertukar antara mod pengguna dan mod kernel. ????Kelemahan kunci putaran adalah jelas. terhad. ????Akhir sekali, mari kita bincangkan tentang pelaksanaan kunci putaran Pelaksanaan kunci putaran boleh berdasarkan C A S pelaksanaan, mula-mula takrifkan lockValueNilai lalai objek1,1 bermaksud sumber kunci adalah percuma, 0 bermaksud sumber kunci telah diduduki, kodnya adalah seperti berikut??
    public?class?SpinLock?{
    ????
    ????//lockValue?默認(rèn)值1
    ????private?AtomicInteger?lockValue?=?new?AtomicInteger(1);
    ????
    ????//自旋獲取鎖
    ????public?void?lock(){
    
    ????????//?循環(huán)檢測嘗試獲取鎖
    ????????while?(!tryLock()){
    ????????????//?空轉(zhuǎn)
    ????????}
    
    ????}
    ????
    ????//獲取鎖
    ????public?boolean?tryLock(){
    ????????//?期望值1,更新值0,更新成功返回true,更新失敗返回false
    ????????return?lockValue.compareAndSet(1,0);
    ????}
    ????
    ????//釋放鎖
    ????public?void?unLock(){
    ????????if(!lockValue.compareAndSet(1,0)){
    ????????????throw?new?RuntimeException("釋放鎖失敗");
    ????????}
    ????}
    
    }

    Fungsi AtomicInteger類型的lockValue變量,AtomicIntegerJava基于C A S實現(xiàn)的Integer原子操作類,還定義了3個函數(shù)lock、tryLock、unLock

    tryLock ditakrifkan di atas - dapatkan kunci

    . 2px;warna latar belakang: rgba(27, 31, 35, 0.05); keluarga fon: "Operator Mono", Consolas, Monaco, Menlo, monospace;patah perkataan: break-all;warna: rgb(255, 100, 65);">C A S更新
    • 如果期望值與LockValue值相等,則lockValue值更新為0,返回 benar,否則執(zhí)行下面邏輯
    • C A S更新
    • 如果期望值與lockValue值相等,則lockValue值更新為0,返回true,否則執(zhí)行下面邏輯
    • 如果期望值與lockValue值不相等,不做任何更新,返回false如果期望值與LockValue值不相等,不做任何更新,返回salah

    unLock函數(shù)-釋放鎖??
    • 期望值0,更新值10,更新值1
    • C A S更新
    • 如果期望值與lockValue值相等,則lockValue值更新為1,返回true,否則執(zhí)行下面邏輯
    • 如果期望值與lockValue值不相等,不做任何更新,返回false

    C A S更新

    ???? ??????如果期望值與lockValue值相等,則lockValue值更新為1,返回