
\begin{slide}{Compare-and-Set (Implementierung)}

Modell der Implementierung:
\begin{verbatim}
class AtomicInteger {  private int value;
  synchronized int get () { return value; }
  synchronized boolean 
    compareAndSet (int expected, int update) {
      if (value == expected) {
        value = update ; return true;
      } else {
        return false; } } }
\end{verbatim}
\bigskip
moderne CPUs haben CAS (oder Äquivalent) \\
im Befehlssatz (Ü: suche Beispiele in x86-Assembler)

\bigskip
JVM (ab 5.0) hat CAS für Atomic\{Integer,Long,Reference\}


\end{slide}


\begin{slide}{Compare-and-Set (JVM)}

Assembler-Ausgabe (des JIT-Compilers der JVM):

\begin{verbatim}
javac CAS.java
java -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly CAS
\end{verbatim}

\url{http://wikis.sun.com/display/HotSpotInternals/PrintAssembly}

\bigskip

Vorsicht, Ausgabe ist groß. Mit \verb|nohup| in Datei umleiten,
nach \verb|AtomicInteger.compareAndSet| suchen.

\bigskip

auch nützlich:
\url{http://blogs.sun.com/watt/resource/jvm-options-list.html}

\end{slide}
