ここでは私が作成したファイルロック用クラスの使い方と例として簡単なカウンタを説明します。
今のところ対応OSはWindows,freeBSDとなっております。
Linux版はLinuxのクロスコンパイラが出来次第作成したいと考えています。
ファイルはこちらから:&ref(): File not found: "lock-0.0.1.zip" at page "D言語でCGI/ファイルロック";
import lock; import std.string; import std.file; void main() { printf("content-type: text/html\n\n"); for(int i=0;i<100;i++){ {auto Lock key = new Lock("countlock");// ブロック中有効なプロセス間ロックのおまじない。 char[] countString = "0"; try{ countString = cast(char[])read("count.txt"); }catch(Exception e){ // ファイルがないとき。は"0" } int count = atoi(countString); count++; write("count.txt",toString(count)); printf("count=%d<BR>\n",count); }// プロセス間ロックはここまでで終了 } }
Lockはautoクラスなので、スコープから抜けると自動的にデストラクタが呼ばれて消えます。つまり、
{auto Lock key = new Lock("countlock"); }
の間、ブロック内だけで、ロックがかかります。
Windows版のロックは内部でファイル名を使ったMutexを用いています。