不透明性とは? わかりやすく解説

不透明性

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/04/05 03:33 UTC 版)

ソフトウェアトランザクショナルメモリ」の記事における「不透明性」の解説

楽観的な読み出しを伴うソフトウェアトランザクショナルメモリ実装には一つ問題がある。それは、実行中の(完了していない)トランザクションは、一貫性破れた状態を読んでしまっていることがあるというものである(つまり、他のトランザクションによる更新の前の値と後の値を混ぜて読んでいることがある)。このようなトランザクションは、例えatomicブロック内の終端まで処理が進んだとしても必ずアボートされる運命にあるので、トランザクションシステムによって強制される一貫性条件破られるわけではない。しかし、この仮の矛盾した状態のために、セグメンテーションフォールトゼロ除算のような致命的な例外(fatal exception) を引き起こしたり、無限ループに陥ってしまうことはありうる。"Language Support for Lightweight Transactions" の図4にある作られた例を示す。 atomic { local_x = x; local_y = y; if (local_x != local_y) while (true) { }} atomic { x++; y++;} トランザクション Aトランザクション B最初に関係 x=y成り立ってたとすると、上記のどちらのトランザクションもこの関係を崩すことはない(不変条件になっている)。しかし、トランザクション A の処理において、x をトランザクションBによる更新前に読み一方 y をトランザクションBによる更新後に読み結果として無限ループ陥るということは起こり得る。これは既に致命的な状態に陥っているにも関わらずトランザクション継続されるためゾンビトランザクションとも呼ばれる。この問題対策としては、致命的な例外横取りしそれぞれのトランザクションが正常かどうか定期的にチェックし異常ならばトランザクションアボートするという方法があるが、言語によっては実装大掛かりになりがちである。 ゾンビトランザクションに対して定期チェックなどを行わずそもそも腐った値を読み出さない保証の事を不透明性(Opacity)と呼ぶ。不透明性を保証する方法として単純なものにIncremental Validation挙げられる。これは新しく値を読むたびにこれまで読んだ値が以前読んだ値と一致している事を確かめる物である。例えばあるトランザクションの中でA,B,Cの3つの変数読み出す場合「Aを読む→Bを読む際にAも読んで前回一致する事を確かめる→Cを読む際にA,Bも読んで前回一致することを確かめる」という手順を踏むこととなり、読み出し操作変数の数に対しO(n2)でスケールする。他にグローバルバージョンクロックを用い手法もある。トランザクション完了するごとにインクリメントされる共有カウンタ用意しておき、値を読み出す側がカウンタチェックする事で他のトランザクションによる書き換え検知する方法である。カウンタの値が増えている場合Incremental Validation同様にチェックを行う手法や、書き換え時のカウンタの値を保護対象メモリ同時に書き込んでおくことによって、無駄なチェック無しに値の非一貫性検知する手法がある。不透明性を保証しているソフトウェアトランザクショナルメモリはこれらの手法を用いる事で非一貫な値を読みそうになった時にアボートする。

※この「不透明性」の解説は、「ソフトウェアトランザクショナルメモリ」の解説の一部です。
「不透明性」を含む「ソフトウェアトランザクショナルメモリ」の記事については、「ソフトウェアトランザクショナルメモリ」の概要を参照ください。

ウィキペディア小見出し辞書の「不透明性」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「不透明性」の関連用語

不透明性のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



不透明性のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのソフトウェアトランザクショナルメモリ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS