Mercurial > hg > Papers > 2014 > toma-master
diff paper/chapter2.tex @ 62:d11f4c6c7657
fix
author | Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 12 Feb 2014 16:13:49 +0900 |
parents | 79d168016df4 |
children | 13535fc08357 |
line wrap: on
line diff
--- a/paper/chapter2.tex Tue Feb 11 23:01:11 2014 +0900 +++ b/paper/chapter2.tex Wed Feb 12 16:13:49 2014 +0900 @@ -65,13 +65,13 @@ \label{fig:rootnode} \end{figure} -ルートノードはスレッド間で共有する状態を持つため, Haskell では IO モナドを用いて状態を扱う必要がある. +ルートノードはスレッド間で共有する状態を持つため, Haskell では IO モナドを用いて状態を扱う. これには, Haskell のソフトウェア・トランザクショナル・メモリ(STM)を利用する. STM はブロックせず, スレッドセーフに状態を扱うことができる. STM を利用することでロック忘れによる競合状態や, デッドロックといった問題から解放される. STM は, STM モナドという特殊なモナドの中でのみ変更できる. -STM モナドの中で変更したアクションのブロックを atomically コンビネータを使ってトランザクションとして実行する. (atomically コンビネータを用いることで IO モナドとして返される). +STM モナドの中で変更したアクションのブロックを atomically コンビネータを使ってトランザクションとして実行する(atomically コンビネータを用いることで IO モナドとして返されるため, I/O操作が可能となる). いったんブロック内に入るとそこから出るまでは, そのブロック内の変更は他のスレッドから見ることはできない. こちら側のスレッドからも他のスレッドによる変更はみることはできず, 実行は完全に孤立して行われる. トランザクションから出る時に, 以下のことが1つだけ起こる.