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

Inhaltsverzeichnis
1. Der Anfangswert ist 100, die Anfangsversionsnummer wurde nicht ge?ndert. Thread t1 und t2 haben die gleiche Anfangsversionsnummer erhalten und wurden nicht ge?ndert Operation, und die Versionsnummer wurde ge?ndert true 4. Thread t2 hat den CAS-Vorgang abgeschlossen. Die Versionsnummer ist nicht gleich der von Thread t2 zuvor erhaltenen Versionsnummer " >1. Der Anfangswert ist 100, die Anfangsversionsnummer wurde nicht ge?ndert. Thread t1 und t2 haben die gleiche Anfangsversionsnummer erhalten und wurden nicht ge?ndert Operation, und die Versionsnummer wurde ge?ndert true 4. Thread t2 hat den CAS-Vorgang abgeschlossen. Die Versionsnummer ist nicht gleich der von Thread t2 zuvor erhaltenen Versionsnummer
Heim Java JavaInterview Fragen Der Interviewer fragt Sie: Wissen Sie, was ein ABA-Problem ist?

Der Interviewer fragt Sie: Wissen Sie, was ein ABA-Problem ist?

Jul 26, 2023 pm 03:09 PM
cas

?Die Zibetkatze tauscht sich gegen den Prinzen aus.“ Die damals geliebten Konkubinen Konkubine Liu und Konkubine Li sind alle schwanger. Es ist offensichtlich, dass jeder, der einen Sohn zur Welt bringt, der Hauptpalast werden kann. Konkubine Liu war schon lange eifersüchtig und befürchtete, dass Konkubine Li einen Sohn zur Welt bringen und zur K?nigin ernannt werden würde, also schmiedete sie einen Plan mit Guo Huai, dem Palastverwalter Dutang, und in Zusammenarbeit mit der Hebamme Youshi, Konkubine Li starb w?hrend der Geburt im Koma. Unerwarteterweise wurde einer Zibetkatze das Fell abgezogen, es war blutig und gl?nzend und nahm den neugeborenen Prinzen mit. Konkubine Liu befahl der Palastmagd Kou Zhu, den Prinzen zu erwürgen, und übergab den Prinzen heimlich dem Eunuchen. Chen Lin steckte den Prinzen in einen Koffer und schickte ihn zu den Acht weisen K?nigen um ihn zu erziehen. Au?erdem sah Zhenzong die geh?utete Zibetkatze und dachte, dass Konkubine Li ein Monster zur Welt gebracht hatte, also degradierte er sie in den kalten Palast. Bald hatte Konkubine Liu Wehen und gebar einen Sohn, der zum Prinzen ernannt wurde und ebenfalls zur K?nigin ernannt wurde. Sechs Jahre sp?ter starb K?nigin Lius Sohn unerwartet an einer Krankheit. Zhenzong hatte keine Erben mehr, also adoptierte er den Sohn seines ?lteren Bruders Baxian Wang (eigentlich der Prinz, der in diesem Jahr ersetzt worden war) als seinen Adoptivsohn und ernannte ihn zum Kronprinzen.

Aus dieser Geschichte geht hervor, dass der Prinz bei seiner Geburt durch eine Zibetkatze ersetzt wurde und durch eine seltsame Kombination von Umst?nden schlie?lich zurückkehrte, um der Prinz zu werden. Obwohl das Ergebnis das gleiche ist, ist der Prozess voller Wendungen und der Prinz hat wirklich ein schlimmes Schicksal. Warum diese Geschichte erz?hlen? Tats?chlich hat es viel mit dem Thema zu tun, das wir heute vorstellen werden. Beim gleichen Ergebnis wei? ich nicht, wie viele Operationen in der Mitte stattgefunden haben. K?nnen wir also denken, dass sich daran nichts ge?ndert hat? In verschiedenen Gesch?ftsszenarien müssen wir dieses Problem sorgf?ltig prüfen.

ABA-Problembeschreibung

In einem Multithread-Szenario

Problem gibt es hier eine einfache Wissenschaft zum ABA-Problem. Beispielsweise gibt es zwei Threads, die CAS-Operationen mit demselben Wert ausführen (Anfangswert). A) gleichzeitig. Die drei Threads lauten wie folgt:

  1. Thread 1, der erwartete Wert ist A, der zu aktualisierende Wert ist B
  2. Thread 2, der erwartete Wert ist A, der zu aktualisierende Wert ist B

Thread 1 erh?lt die CPU-Zeitscheibe Zuerst erh?lt Thread 2 aus anderen Gründen zuerst die CPU-Zeitscheibe. Der Grund ist blockiert. Der Wert von Thread 1 wird mit dem erwarteten Wert von A verglichen. Es wird festgestellt, dass er gleich ist, und dann wird der Wert auf B aktualisiert Zu diesem Zeitpunkt erscheint Thread 3, der erwartete Wert ist B, der zu aktualisierende Wert ist A und der Wert von Thread 3 ist derselbe wie der erwartete Wert. Vergleichen Sie den Wert B und aktualisieren Sie ihn, wenn festgestellt wird, dass er gleich ist der Wert auf A. Zu diesem Zeitpunkt erholt sich Thread 2 von der Blockierung und erh?lt die CPU-Zeitscheibe. Zu diesem Zeitpunkt wird der Wert von Thread 2 mit dem erwarteten Wert A verglichen. Wenn festgestellt wird, dass er gleich ist, wird der Wert aktualisiert zu B. Obwohl Thread 2 den Vorgang ebenfalls abgeschlossen hat, wei? Thread 2 nicht, dass der Wert den ?nderungsprozess von A->B->A durchlaufen hat.

Gib mir ein konkretes Beispiel

Xiao Ming hat 50 Yuan vom Geldautomaten abgehoben, es gab zwei Threads und der Kontostand wurde gleichzeitig von 100 auf 50 ge?ndert Zeit:

  • Thread 1 (Geldautomat): Aktuellen Wert 100 abrufen, Aktualisierung auf 50 erwarten;
  • Thread 2 (Geldautomat): Aktuellen Wert 100 abrufen, Aktualisierung auf 50 erwarten;
  • Thread 1 erfolgreich ausgeführt, Thread 2 ist aus irgendeinem Grund blockiert;
  • Zu diesem Zeitpunkt überweist jemand 50 an Xiao Ming;
  • Thread 3 (Standard): Holen Sie sich den aktuellen Wert von 50 und erwarten Sie ihn auf 100 aktualisiert werden. Zu diesem Zeitpunkt wird Thread 3 erfolgreich ausgeführt und der Kontostand wird 100;
  • Thread 2 erholt sich vom Block und erh?lt 100. Nach dem Vergleich wird der Kontostand weiterhin auf 50 aktualisiert.

An dieser Stelle k?nnen Sie sehen, dass der tats?chliche Saldo sein sollte: 100(100-50+50),但是實際上變?yōu)榱?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;word-break: break-all;color: rgb(239, 112, 96);'>50(100-50+50-50)Dies ist das ABA-Problem, das zu falschen Einreichungsergebnissen führt.

L?sung

Um das ABA-Problem zu l?sen, k?nnen Sie eine Versionsnummer hinzufügen. Jedes Mal, wenn der Wert des Speicherorts V ge?ndert wird, wird die Versionsnummer um 1 erh?ht

Codebeispiel

ABA-Probleme durch AtomicStampedReference l?sen

  • AtomicStampedReference beh?lt den Objektwert und die Versionsnummer intern bei den Anfangswert übergeben und ursprüngliche Version Nr.;

  • Wenn AtomicStampedReference den Objektwert festlegt, müssen sowohl der Objektwert als auch der Statusstempel den erwarteten Wert erfüllen, damit der Schreibvorgang erfolgreich ist.

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當(dāng)前值:" + atomicStampedReference.getReference());
 },"t2").start();
}

1. Threads t1 und t2 erhalten die gleiche anf?ngliche Versionsnummer
3. Thread t1 schlie?t den ABA-Vorgang ab und die Versionsnummer wird auf 3
4 erh?ht . Thread t2 Der CAS-Vorgang ist zu 3 geworden, was nicht mit der Versionsnummer 1 übereinstimmt, die zuvor von Thread t2 erhalten wurde. Das Ergebnis der Ausführung:

L?sen Sie das ABA-Problem durch AtomicMarkableReference

, Der einzige Unterschied zwischen AtomicMarkableReference besteht darin, dass zur Identifizierung der Referenz nicht mehr int verwendet wird, sondern eine boolesche Variable verwendet wird, um anzugeben, ob die Referenzvariable ge?ndert wurde.

t1拿到的初始版本號:1
t2拿到的初始版本號:1
最新版本號:3
false 當(dāng)前值:100

1. Der Anfangswert ist 100, die Anfangsversionsnummer wurde nicht ge?ndert. Thread t1 und t2 haben die gleiche Anfangsversionsnummer erhalten und wurden nicht ge?ndert Operation, und die Versionsnummer wurde ge?ndert true 4. Thread t2 hat den CAS-Vorgang abgeschlossen. Die Versionsnummer ist nicht gleich der von Thread t2 zuvor erhaltenen Versionsnummer

AtomicStampedReference可以給引用加上版本號,追蹤引用的整個變化過程,如:A -> B -> C -> D -> A,通過AtomicStampedReference,我們可以知道,引用變量中途被更改了3次。但是,有時候,我們并不關(guān)心引用變量更改了幾次,只是單純的關(guān)心是否更改過,所以就有了AtomicMarkableReference

Ausführung Ergebnis:

t1版本號是否被更改:false
t2版本號是否被更改:false
是否更改過:true
false 當(dāng)前值:100

多說幾句

以上是本期關(guān)于CAS領(lǐng)域的一個經(jīng)典ABA問題的解析,不知道你在實際的工作中有沒有遇到過,但是在面試中這塊是并發(fā)知識考查的重點。如果你還沒接觸過此類的問題,我的建議是你自己將上面的代碼運行一下,結(jié)合理論去理解一下ABA問題所帶來的問題以及如何解決他,這對你日后的開發(fā)工作也是有莫大的幫助的!

Das obige ist der detaillierte Inhalt vonDer Interviewer fragt Sie: Wissen Sie, was ein ABA-Problem ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
Implementieren Sie die PHP-Sicherheitsüberprüfung über CAS (Central Authentication Service). Implementieren Sie die PHP-Sicherheitsüberprüfung über CAS (Central Authentication Service). Jul 24, 2023 pm 12:49 PM

PHP-Sicherheitsüberprüfung durch CAS (CentralAuthenticationService) Mit der rasanten Entwicklung des Internets werden Benutzerrechteverwaltung und Identit?tsüberprüfung immer wichtiger. Bei der Entwicklung von Webanwendungen ist es von entscheidender Bedeutung, Benutzerdaten zu schützen und unbefugten Zugriff zu verhindern. Um dieses Ziel zu erreichen, k?nnen wir CAS (CentralAuthenticationService) zur PHP-Sicherheitsüberprüfung verwenden. CAS

Was ist das Konzept von Java CAS? Was ist das Konzept von Java CAS? May 03, 2023 pm 09:34 PM

1. Erkl?ren Sie, dass, wenn mehrere Threads gleichzeitig CAS-Operationen für eine Ressource ausführen, nur ein Thread erfolgreich ist, andere Threads jedoch nicht blockiert werden und andere Threads nur ein Signal erhalten, dass die Operation fehlgeschlagen ist. Es ist ersichtlich, dass CAS tats?chlich eine optimistische Sperre ist. 2. Wenn wir dem AtomInteger-Code folgen, k?nnen wir feststellen, dass letztendlich sum.misc.Unsafe aufgerufen wird. Schauen Sie sich den Namen ?Unsafe“ an. Dabei handelt es sich um eine unsichere Klasse, die genau die richtigen Lücken in den Klassen- und Sichtbarkeitsregeln von Java ausnutzt. Aus Gründen der Geschwindigkeit geht Unsafe einige Kompromisse bei den Sicherheitsstandards von Java ein. publicfinalnativebooleancompareAndSwapInt(Objec

So wenden Sie CAS in Java an So wenden Sie CAS in Java an Apr 18, 2023 pm 06:37 PM

CAS-Erkl?rung: CAS (compareandswap), vergleichen und austauschen. Ein Mechanismus, der den durch die Verwendung von Sperren in Situationen mit mehreren Threads verursachten Leistungsverlust beheben kann. Die CAS-Operation enth?lt drei Operanden: Speicherort (V), erwarteter Originalwert (A) und neuer Wert (B). Wenn der Wert eines Speicherorts mit dem erwarteten Originalwert übereinstimmt, aktualisiert der Prozessor den Ort automatisch auf den neuen Wert. Ansonsten macht der Prozessor nichts. Ein Thread ruft den Num-Wert aus dem Hauptspeicher ab und verarbeitet Num. Beim Schreiben des Werts vergleicht der Thread den ersten Num-Wert mit dem Num-Wert im Hauptspeicher. Wenn sie gleich sind, ist der ge?nderte Wert Num Wenn sie nicht gleich sind, wird der Vergleich wiederholt, bis er erfolgreich ist. Hergestellt von CAS

So verwenden Sie CAS und Java Optimistic Locking So verwenden Sie CAS und Java Optimistic Locking May 01, 2023 pm 08:07 PM

Was CASCAS ist, ist CompareAndSwap, also Vergleichen und Tauschen. Warum verwendet CAS keine Sperren, gew?hrleistet aber dennoch den sicheren Betrieb von Daten unter gleichzeitigen Bedingungen? Daten und der zu ?ndernde Wert werden an die Methode übergeben, um zu vergleichen, ob der aktuelle Zielvariablenwert mit dem ursprünglich übergebenen Wert übereinstimmt. Wenn sie identisch sind, bedeutet dies, dass die Zielvariable nicht von anderen Threads ge?ndert wurde . ?ndern Sie einfach den Zielvariablenwert direkt, dann beweisen Sie, dass die Zielvariable von anderen Threads ge?ndert wurde. Aus dem obigen Prozess k?nnen wir ersehen garantiert tats?chlich eine sichere ?nderung der Daten, es gibt jedoch F?lle, in denen die ?nderung fehlschl?gt.

Java-Sperren-Parallelit?t, sperrenfreie Parallelit?t und CAS-Beispielanalyse Java-Sperren-Parallelit?t, sperrenfreie Parallelit?t und CAS-Beispielanalyse May 23, 2023 pm 01:34 PM

Gesperrte Parallelit?t Für die meisten Programmierer (natürlich bin ich im Grunde einer von ihnen) ist gleichzeitiges Programmieren fast gleichbedeutend mit dem Hinzufügen einer Sperre (Mutex) zur relevanten Datenstruktur. Wenn wir beispielsweise einen Stapel ben?tigen, der Parallelit?t unterstützt, besteht die einfachste M?glichkeit darin, eine Sperre std::sync::Mutex zu einem Single-Threaded-Stack hinzuzufügen. (Arc wird hinzugefügt, um mehreren Threads den Besitz des Stapels zu erm?glichen) usestd::sync::{Mutex,Arc};#[derive(Clone)]structConcurrentStack{inner:Arc,}implConcurrentStack{pubfnnew()-> Self{

Echte Interviewfrage: Bitte sprechen Sie über den CAS-Mechanismus bei Parallelit?t Echte Interviewfrage: Bitte sprechen Sie über den CAS-Mechanismus bei Parallelit?t Jul 26, 2023 pm 03:05 PM

Im Programm habe ich 100 Threads erstellt und jeder Thread hat 10.000 Operationen für die gemeinsam genutzte Variable inc gesammelt. Wenn es synchron ausgeführt wird, sollte der Endwert von inc 1.000.000 sein, aber wir wissen, dass das Programm beim Multithreading gleichzeitig ausgeführt wird Das hei?t, verschiedene Threads k?nnen gleichzeitig denselben Wert aus dem Hauptspeicher lesen.

Der Interviewer fragt Sie: Wissen Sie, was ein ABA-Problem ist? Der Interviewer fragt Sie: Wissen Sie, was ein ABA-Problem ist? Jul 26, 2023 pm 03:09 PM

In dieser Ausgabe geht es um die Analyse eines klassischen ABA-Problems im CAS-Bereich. Ich wei? nicht, ob Sie in der tats?chlichen Arbeit darauf gesto?en sind, aber dies ist der Schwerpunkt des Parallelit?tswissenstests im Interview. Wenn Sie noch nicht auf ein solches Problem gesto?en sind, empfehle ich Ihnen, den obigen Code selbst auszuführen.

So erstellen Sie einen CAS-Client basierend auf Springboot So erstellen Sie einen CAS-Client basierend auf Springboot May 14, 2023 am 10:46 AM

1. Erstellen Sie ein neues Springboot-Projekt und führen Sie die Abh?ngigkeit org.jasig.cas.clientcas-client-support-springboot3.6.22 ein. Konfigurieren Sie das @EnableCasClient-Annotationspaketcom.codetiler.demo;importorg.jasig.cas.client.boot.configuration. EnableCasClient;importorg.springframework.boot.SpringApplication;importorg.spring

See all articles