top page > computer > haskell > coding > this_server > stmfile_hs.html
更新日:
文責: 重城良国

モジュールStmFile.hsを作る

モジュールの目的

STM(ソフトウェアトランザクショナルメモリ)の考えかたを応用して、ファイルを複数のスレッドから編集する。

基本的な流れ

  1. そのスレッドに個有のディレクトリを作成する
  2. ファイルを読み込む
  3. ハッシュ値を計算して個有のディレクトリに保存する
  4. 更新作業を行いその結果を固有のディレクトリに保存する
  5. ロックを取得する
  6. ファイルを読み込み、ハッシュ値を計算する
  7. 保存しておいたハッシュ値と比較する
  8. 同じだったら
    1. 仮のファイルをリネームし、もとのファイルを上書き
    2. ディレクトリを削除し終了
  9. 2にもどる

決定すべき事項

ディレクトリ名

もとのファイルの'.'を'_'に変えた文字列にthread IDをくっつけたものとする。

ハッシュ関数

この程度の用途であれば何でも良いとは思うが、一応SHA 256あたりにする。

ロックのアルゴリズム

STMを使用したロック

ロックにはSTMを使用することにする。ロックは値がUnlockになるまでretryし、UnlockになったらLockにして次の処理へ。アンロックは単に値をUnlockにすれば良い。

ディレクトリの作成を使用したロック

上の方法は「同一プロセス内の複数のスレッド」でなら使えるが、「複数のプロセス」の場合は使えない。この場合にはディレクトリの作成を使用したロックが必要になる。

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics