Rumah Java JavaSoalan temu bual Penemuduga bertanya kepada anda: Adakah anda tahu apa itu masalah ABA?

Penemuduga bertanya kepada anda: Adakah anda tahu apa itu masalah ABA?

Jul 26, 2023 pm 03:09 PM
cas

. gundik-gundik yang dikasihi pada masa itu, Gundik Liu dan Gundik Li Mereka semua sedang hamil Jelas sekali sesiapa yang melahirkan anak lelaki akan dapat menjadi istana utama. Gundik Liu sudah lama cemburu, takut Gundik Li akan melahirkan anak lelaki dan dijadikan ratu, maka dia membuat rancangan dengan Guo Huai, pengurus istana, Dutang, dan dengan kerjasama bidan Youshi, Gundik Li mati kerana pengsan darah semasa bersalin Tanpa diduga bulu kucing musang telah dilucutkan, dan ia berdarah dan berkilat dan membawa putera yang baru dilahirkan. Gundik Liu mengarahkan pembantu istana Kou Zhu untuk mencekik putera itu sehingga mati untuk membesarkannya. Selain itu, Zhenzong melihat kucing musang berkulit itu dan menyangka bahawa Gundik Li telah melahirkan seekor raksasa, jadi dia menurunkannya ke istana yang sejuk. Tidak lama kemudian, Gundik Liu bersalin dan melahirkan seorang anak lelaki, yang dijadikan putera raja. Tanpa diduga, enam tahun kemudian, anak Ratu Liu meninggal dunia kerana sakit. Zhenzong tidak lagi mempunyai waris, jadi dia mengambil anak angkat kepada abangnya Baxian Wang (sebenarnya putera raja yang telah digantikan pada tahun itu) sebagai anak angkatnya dan menetapkannya sebagai putera mahkota.

Dapat dilihat dari cerita ini bahawa putera raja telah digantikan oleh kucing musang ketika dia dilahirkan, dan akhirnya kembali menjadi putera raja oleh beberapa kombinasi keadaan yang aneh. Walaupun hasilnya sama, prosesnya berliku-liku, dan putera raja benar-benar bernasib buruk. Kenapa nak cerita ni? Malah, ia mempunyai banyak kaitan dengan isu yang akan kami perkenalkan hari ini. Dengan keputusan yang sama, saya tidak tahu berapa banyak operasi telah berlaku di tengah, jadi bolehkah kita berfikir bahawa ia tidak berubah? Dalam senario perniagaan yang berbeza, kita mesti mempertimbangkan isu ini dengan teliti.

Aba Description Masalah

Dalam senario-senario
problem berbilang, di sini adalah sains yang mudah mengenai masalah ABA. A) pada masa yang sama Ini Tiga utas adalah seperti berikut:

  1. Thread 1, nilai jangkaan ialah A, nilai yang akan dikemas kini ialah B
  2. Thread 2, nilai jangkaan ialah A, nilai yang perlu dikemas kini ialah B

Thread 1 mendapat kepingan masa CPU pertama, manakala utas 2 mendapat kepingan masa CPU dahulu kerana sebab lain Sebabnya disekat Nilai utas 1 dibandingkan dengan nilai jangkaan A. Ia didapati sama dan kemudian nilainya dikemas kini kepada B. Kemudian. pada masa ini, utas 3 muncul, nilai yang dijangkakan ialah B, nilai yang akan dikemas kini ialah A, dan nilai utas 3 adalah sama dengan nilai yang dijangkakan dan jika didapati sama, kemas kini nilai kepada A. Pada masa ini, utas 2 pulih daripada penyekatan dan memperoleh kepingan masa CPU Pada masa ini, nilai utas 2 dibandingkan dengan nilai yang dijangkakan A. Jika didapati sama, nilainya dikemas kini. kepada B. , walaupun utas 2 juga telah menyelesaikan operasi, utas 2 tidak mengetahui bahawa nilai telah melalui proses perubahan A->B->A.

Beri saya contoh khusus

Xiao Ming mengeluarkan 50 yuan dari mesin tunai Disebabkan masalah dengan mesin tunai, terdapat dua benang dan bakinya ditukar daripada 100 kepada 50 pada masa yang sama. masa:

  • Benang 1 (mesin tunai): Dapatkan nilai semasa 100, jangkakan kemas kini kepada 50;
  • Thread 1 berjaya dilaksanakan, Thread 2 disekat atas sebab tertentu; dikemas kini kepada 100. Pada masa ini, utas 3 berjaya dilaksanakan dan bakinya Menjadi 100;
  • Anda boleh lihat pada ketika ini bahawa baki sebenar sepatutnya
  • Ini adalah masalah ABA yang membawa hasil penyerahan yang salah.
  • Penyelesaian
  • Untuk menyelesaikan masalah ABA, anda boleh menambah nombor versi Setiap kali nilai lokasi memori V diubah, nombor versi dinaikkan sebanyak 1
  • Contoh kod objek ference, anda perlu memasukkan nilai awal dan versi awal No.;

    Apabila AtomicStampedReference menetapkan nilai objek, kedua-dua nilai objek dan cap status mesti memenuhi nilai yang dijangkakan untuk menulis berjaya.

    private static AtomicStampedReference<Integer> atomicStampedReference = new AtomicStampedReference<Integer>(100,1);
    
    public static void main(String[] args) {
    //第一个线程
     new Thread(() -> {
      System.out.println("t1拿到的初始版本号:" + atomicStampedReference.getStamp());
      
      //睡眠1秒,是为了让t2线程也拿到同样的初始版本号
      try {
       TimeUnit.SECONDS.sleep(1);
      } catch (InterruptedException e) {
       e.printStackTrace();
      }
      atomicStampedReference.compareAndSet(100, 101,atomicStampedReference.getStamp(),atomicStampedReference.getStamp()+1);
      atomicStampedReference.compareAndSet(101, 100,atomicStampedReference.getStamp(),atomicStampedReference.getStamp()+1);
     },"t1").start();
     
      // 第二个线程
     new Thread(() -> {
      int stamp = atomicStampedReference.getStamp();
      System.out.println("t2拿到的初始版本号:" + stamp);
      
      //睡眠3秒,是为了让t1线程完成ABA操作
      try {
       TimeUnit.SECONDS.sleep(3);
      } catch (InterruptedException e) {
       e.printStackTrace();
      }
      System.out.println("最新版本号:" + atomicStampedReference.getStamp());
      System.out.println(atomicStampedReference.compareAndSet(100, 2019,stamp,atomicStampedReference.getStamp() + 1) + "\t当前值:" + atomicStampedReference.getReference());
     },"t2").start();
    }
    Salin selepas log masuk
    e
    1. . Thread t2 Operasi CAS telah selesai Nombor versi terkini telah menjadi 3, yang tidak sama dengan nombor versi 1 yang diperolehi oleh thread t2 sebelum ini. Selesaikan masalah ABA melalui AtomicMarkableReference

    • , Satu-satunya perbezaan antara AtomicMarkableReference ialah ia tidak lagi menggunakan int untuk mengenal pasti rujukan, tetapi menggunakan pembolehubah boolean untuk menunjukkan sama ada pembolehubah rujukan telah diubah.

      t1拿到的初始版本号:1
      t2拿到的初始版本号:1
      最新版本号:3
      false 当前值:100
      Salin selepas log masuk

      1 Nilai awal ialah 100, nombor versi awal belum diubah suai palsu
    • 2 Benang t1 dan t2 mempunyai nombor versi awal yang sama dan belum diubah suai palsu
    • 3 , dan nombor versi telah diubah suai benar
      4 Thread t2 menyelesaikan operasi CAS Nombor versi telah menjadi benar, yang tidak sama dengan nombor versi palsu yang diperolehi oleh thread t2 sebelum ini :

      t1版本号是否被更改:false
      t2版本号是否被更改:false
      是否更改过:true
      false 当前值:100
      Salin selepas log masuk

      多说几句

      以上是本期关于CAS领域的一个经典ABA问题的解析,不知道你在实际的工作中有没有遇到过,但是在面试中这块是并发知识考查的重点。如果你还没接触过此类的问题,我的建议是你自己将上面的代码运行一下,结合理论去理解一下ABA问题所带来的问题以及如何解决他,这对你日后的开发工作也是有莫大的帮助的!

    Atas ialah kandungan terperinci Penemuduga bertanya kepada anda: Adakah anda tahu apa itu masalah ABA?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Laksanakan pengesahan keselamatan PHP melalui CAS (Central Authentication Service) Laksanakan pengesahan keselamatan PHP melalui CAS (Central Authentication Service) Jul 24, 2023 pm 12:49 PM

Pengesahan keselamatan PHP melalui CAS (CentralAuthenticationService) Dengan perkembangan pesat Internet, pengurusan hak pengguna dan pengesahan identiti menjadi semakin penting. Apabila membangunkan aplikasi web, adalah penting untuk melindungi data pengguna dan menghalang capaian yang tidak dibenarkan. Untuk mencapai matlamat ini, kami boleh menggunakan CAS (CentralAuthenticationService) untuk pengesahan keselamatan PHP. CAS

Apakah konsep java CAS Apakah konsep java CAS May 03, 2023 pm 09:34 PM

1. Jelaskan bahawa apabila berbilang benang melakukan operasi CAS pada sumber pada masa yang sama, hanya satu benang berjaya, tetapi ia tidak akan menyekat benang lain dan benang lain hanya akan menerima isyarat bahawa operasi itu gagal. Ia boleh dilihat bahawa CAS sebenarnya adalah kunci yang optimistik. 2. Mengikuti kod AtomInteger, kita boleh mendapati sum.misc.Unsafe akhirnya dipanggil. Lihat nama Tidak Selamat, ia adalah kelas tidak selamat yang mengeksploitasi hanya lubang yang betul dalam kelas Java dan peraturan keterlihatan. Demi kelajuan, Unsafe membuat beberapa kompromi pada piawaian keselamatan Java. publicfinalnativebooleancompareAndSwapInt(Objec

Bagaimana untuk menggunakan CAS java Bagaimana untuk menggunakan CAS java Apr 18, 2023 pm 06:37 PM

Penjelasan CAS: CAS (compareandswap), bandingkan dan tukar. Mekanisme yang boleh menyelesaikan kehilangan prestasi yang disebabkan oleh menggunakan kunci dalam situasi selari berbilang benang Operasi CAS mengandungi tiga operan—lokasi memori (V), nilai asal yang dijangkakan (A) dan nilai baharu (B). Jika nilai lokasi memori sepadan dengan nilai asal yang dijangkakan, pemproses secara automatik mengemas kini lokasi kepada nilai baharu. Jika tidak, pemproses tidak melakukan apa-apa. A thread mendapat nilai num dari memori utama dan beroperasi pada num Apabila menulis nilai, thread akan membandingkan nilai num pertama yang diperolehi dengan nilai num dalam ingatan utama, nilai yang berubah akan menjadi num ditulis ke dalam ingatan utama Jika mereka tidak sama, perbandingan akan digelung sehingga berjaya. Dibuat oleh CAS

Java lock concurrency, lock-free concurrency dan analisis contoh CAS Java lock concurrency, lock-free concurrency dan analisis contoh CAS May 23, 2023 pm 01:34 PM

Selaras terkunci Bagi kebanyakan pengaturcara (sudah tentu saya pada asasnya salah seorang daripada mereka), pengaturcaraan serentak hampir sama dengan menambah kunci (Mutex) pada struktur data yang berkaitan. Sebagai contoh, jika kita memerlukan tindanan yang menyokong konkurensi, cara paling mudah ialah menambah kunci std::sync::Mutex pada tindanan satu benang. (Arc ditambah untuk membenarkan berbilang benang memiliki pemilikan tindanan) usestd::sync::{Mutex,Arc};#[derive(Clone)]structConcurrentStack{inner:Arc,}implConcurrentStack{pubfnnew()-> Self{

Cara menggunakan penguncian optimistik CAS dan java Cara menggunakan penguncian optimistik CAS dan java May 01, 2023 pm 08:07 PM

Apa itu CASCAS ialah CompareAndSwap, iaitu, bandingkan dan tukar. Mengapa CAS tidak menggunakan kunci tetapi masih memastikan manipulasi data yang selamat di bawah keadaan serentak Nama sebenarnya menunjukkan prinsip CAS dengan sangat intuitif Proses khusus mengubah suai data adalah seperti berikut: Apabila menggunakan CAS untuk mengendalikan data, nilai asal data dan nilai yang akan diubah suai ialah Hantarkannya kepada kaedah untuk membandingkan sama ada nilai pembolehubah sasaran semasa adalah sama dengan nilai asal yang diluluskan. Jika ia adalah sama, ini bermakna pembolehubah sasaran belum diubah suai oleh utas lain. Ubah suai nilai pembolehubah sasaran secara langsung Jika nilai pembolehubah sasaran berbeza daripada nilai asal, maka buktikan pembolehubah sasaran Ia telah diubah suai oleh pengubahsuaian CAS ini, kita dapat melihat bahawa CAS sebenarnya menjamin pengubahsuaian data yang selamat, tetapi terdapat kes di mana pengubahsuaian gagal.

Soalan temu bual sebenar: Sila bincangkan tentang mekanisme CAS secara serentak Soalan temu bual sebenar: Sila bincangkan tentang mekanisme CAS secara serentak Jul 26, 2023 pm 03:05 PM

Dalam program ini, saya mencipta 100 utas, dan setiap utas mengumpul 10,000 operasi pada pembolehubah kongsi inc Jika ia dilaksanakan secara serentak, nilai akhir inc hendaklah 1,000,000, tetapi kita tahu bahawa dalam multi-threading, program dilaksanakan serentak. , iaitu, benang yang berbeza mungkin membaca nilai yang sama dari memori utama pada masa yang sama.

Bagaimana untuk membina Pelanggan CAS berdasarkan springboot Bagaimana untuk membina Pelanggan CAS berdasarkan springboot May 14, 2023 am 10:46 AM

1. Buat projek springboot baharu dan perkenalkan dependency org.jasig.cas.clientcas-client-support-springboot3.6.22 Konfigurasikan @EnableCasClient anotasi packagecom.codetiler.demo;importorg.jasig.cas.client.boot.configuration. EnableCasClient;importorg. springframework.boot.SpringApplication;importorg.spring

Penemuduga bertanya kepada anda: Adakah anda tahu apa itu masalah ABA? Penemuduga bertanya kepada anda: Adakah anda tahu apa itu masalah ABA? Jul 26, 2023 pm 03:09 PM

Isu ini adalah mengenai analisis masalah ABA klasik dalam bidang CAS Saya tidak tahu sama ada anda pernah menemuinya dalam kerja sebenar, tetapi ini adalah fokus ujian pengetahuan serentak dalam temu bual. Jika anda tidak menemui masalah seperti ini, cadangan saya adalah untuk menjalankan sendiri kod di atas.

See all articles