芸術のJava並行プログラミング(3)アトミック動作原理

アトミック操作の原則

原子(原子)が意味アトミック操作(アトミック動作)「を最小の粒子はさらに、分割することができない」ことを意図「中断または一連の動作とすることができません。」マルチプロセッサに実装アトミック操作がやや複雑になります。IntelプロセッサおよびJavaでレッツ・チャットは、アトミック操作を実現する方法です。

原子操作プロセッサを実現する方法

(1)バスキー保証アトミックを使用して
複数のプロセッサが同時に修正書き込み動作共有変数(I ++)を読み取る場合、共有変数が同時に動作する複数のプロセッサとなり、従って原子を読み取る上書き操作が操作ありません値および終了後の変数を共有した一貫性のない期待。
ここに画像を挿入説明
バス鍵は、他のプロセッサを要求し、バス上の信号は、ライブブロックされ、このプロセッサの出力は、次いで、プロセッサは排他的に共有メモリであってもよいプロセッサによって提供LOCK#信号を使用することです。
(2)キャッシュロック保証アトミックを使用。
ロックキャッシュメモリ領域がロック操作中に、キャッシュラインのプロセッサにキャッシュされ、ロックされている場合は、その後、彼はメモリに書き戻さロック操作を実行することを意味は、プロセッサがバス上公言LOCK#信号ではなく、内部を変更しますアトミック操作を保証するために彼のキャッシュ・コヒーレンシ機構を備えたメモリアドレス。
キャッシュ・コヒーレンシは、
別のプロセッサライトバックデータ・キャッシュ・ラインがロックされているとき、それはキャッシュラインが無効である可能、二つ以上のプロセッサキャッシュでメモリ領域を変更し、同時にデータを防ぎます。

アトミック操作の手段とロックCASサイクルモードによって達成されたJava

CASサイクルは、アトミック操作を使用して実装しました

同時スタートJDK1.5パッケージは、(のAtomicIntegerの)アトミック操作をサポートするためのクラスを提供します

アトミック操作の三の大課題を達成するため、CAS

(1)ABA問題の
CASの価値が運転中に必要な時間は、値から変更されているチェックABA CASすると、その値は変化していないことが判明、実際には検査中に変更されます。ソリューションABAの問題は、バージョン番号を使用することです。バージョン番号は、変数の前に追加され、変数たびにアップデートバージョン番号に1を加え、次にABAは、となる。図1A-2B。3A〜
(2)のサイクル時間オーバヘッド大長い
スピン時間CAS失敗し、かどう偉大な実行オーバーヘッドを持参CPU。
(3)のみ共有変数のアトミック操作を保証することができ

アトミック操作を達成するためのロック機構

そのロックを操作できるようにするロックを獲得するスレッドの専用メモリ領域のロック機構を確実にします。たくさんの、偏ったロック、ロック、軽量ミューテックスを達成するために、内部のJVMロック機構。スレッドがロックを解除するためにCASサイクルを使用しているとき、それはsynchronizedブロックを終了すると、ロックを取得するためにCASサイクルの方法を使用するときに同期ブロックを入力したい場合には、CASサイクル、との両方を達成するためにバイアスされ、ロックに加えて、JVMのロック方法。

公開された24元の記事 ウォンの賞賛1 ビュー548

おすすめ

転載: blog.csdn.net/qq_45366515/article/details/105121188