////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2004 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz

    送信日： 2004/08/09(Mon) No.269
    配信数： 2095
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                ２００４年８月９日（月）の更新                  */
http://www.kab-studio.biz/index.html

・８月表紙壁紙！
　毎月恒例、新しい表紙です。
　今度はパプリカ！　いつもは無愛想な彼女も、時にはこんな表情を見せるん
です……。
　壁紙版のダウンロードは CG GALLERY にて。 
[ CG Gallery ]
http://www.kab-studio.biz/CG/Gallery/index.html#KAB_studio_200408_1024

////////////////////////////////////////////////////////////////////
/*                        ちょお普通な日記                        */
http://www.kab-studio.biz/nikki2/index.html

2004/08/01 (Sun)
　アマゾンからのとかストIIIを受け取ってから、休出。右往左往しつつす
べて解決。なにげに疲れてない。でも休日欲しい……。そしてキーボード。
そしてプロジェクター。

2004/08/02 (Mon)
　ヒマ。帰りに上司の人とお話。いつの間にか寝てた。「日付指定リンク」
運用開始。

2004/08/03 (Tue)
　帰り際にどわーっと。定時上がりはつらい……。９９制限。ストIIIと
ジョイスティック。４４マグと９ミリ。そして ThinkPad と右手。

2004/08/04 (Wed)
　バグをがりがりがりがり修正。がんばって１０時上がり。ギャラクシーエ
ンジェルが面白すぎる……。勇者SEのネタがもうありません。

2004/08/05 (Thu)
　もしかしたら初めての定時上がり。ヨドバシでウイイレ８購入。マスター
リーグでこつこつやっていきます。

2004/08/06 (Fri)
　計算系のやっかいなバグで頭がウニに。さらに急遽修正系が。派遣先はお
休みだったらしい……。１１時半上がりだけど土日お休み。太極拳の推手が
マイブーム。

2004/08/07 (Sat)
　午前中は洗濯とか。３時まで表紙壁紙描き、そのあと昼寝とか。トラック
の運ちゃんと CLANNAD 。かぶろぐとルビと HTML タグ。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.biz/Novel/Fuga/index.html

■　第十章　剣と魔法　−１８−

「盗まれた情報に……？」
　ややこしい話に、舞は混乱した。
「つまりだ、元々の、この場所の情報は、ファインダウト社にあった、つま
りそれは、あの左って男が知ってたってことだろ？」
　リシュネは頷いた。
「洋一を問いつめて聞き出したの。洋一はこの場所も、それだけじゃなく土
や風の泉の場所も知ってた」
「知ってたって」
　あり得ないことだった。
　泉の人間ですら知らないことを、なぜ、洋一が知っているのか。
「……知っていたことは、問題じゃないの」
「？」
「たとえば、ＡＰ。私達ＡＰは、その元となる『祖体』があった」
「ＡＰの……ご先祖様？」
「洋一が言うには……」
　……。
　リシュネの、沈黙。
　一分は続いたかというそのあと。
「……私達ＡＰは、『ミナクート』っていうものをベースに作られている」
　赤葉の手がぴく、と動く。
「みなくーと？」
「古代人、人間を遙かに超越した存在、人間が生まれる以前に滅びた……け
ど、その遺体のひとつが海底深くに沈んでいた。洋一は」
　何か、遠くを見てから。
「洋一はその場所を正確に知っていた。私財を投入してミナクートを引き上
げた。基礎研究のための知識も提供したからこそ、先生はＡＰを作ることが
できた」
　何もかも知る者。
「……全ての引き金は、その男ってことか……」
　その雅樹の瞳は、敵を見ているかのようだった。
「でも」
　その雅樹の目を、リシュネは同じく敵を見るように、睨んだ。
「私は望んでＡＰになった。ＡＰになって良かった。それだけは忘れない
で」
　だから、洋一に何かしようとするのならば。
　雅樹とリシュネはしばらくの間睨み合っていたが、不意に雅樹が目を逸ら
した。
「ま、本人が納得してるんならいっか」
                                                              (続く)

////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 14.02
プロセスと同期

「マルチスレッドの話の前に、わかりやすい【プロセス】とその同期の説明
からします」
『プロセスって Version 8.04 ( No.146 ) でやったのだよね』
「そう。実行ファイル、つまり exe をダブルクリックすると作られるもの
です。プロセスには次のような機能があります」

・仮想メモリを管理する。
・WinMain() を呼び出す。

「まず、プロセスは仮想メモリを管理します。というか、仮想メモリは
プロセス毎に割り当てられる、っていう方が正しいかな」
『だから、プロセスが他のプロセスの変数にアクセスできないんだよね』
「そういうこと。あるプロセスで実行しているプログラムの変数のアドレス
が 0x00001234 のだとしても、他のプロセスで実行している同じプログラム
では 0x00001234 は別の変数が使っている、っていうことだから」
『アドレスがまったく違っちゃうわけね』
「もうひとつ、プロセスは WinMain() 関数を呼び出します」
『 Version 8.01 ( No.143 ) でやった、一番最初に呼ばれる関数ね』
「プロセスの機能はこのふたつ。このことを踏まえつつ、同期というものに
ついて見ていきます」
『どうき、シンクロナイゼーションってヤツね』
「まず、メモ帳を実行してください」
『……メモ帳って、アクセサリの？』
「そう。スタートメニューから【プログラム】＞【アクセサリ】のメモ帳。
この中に」

いち。

「と書いて、適当な場所に test.txt という名前で保存してください」
『ほい保存した』
「そうしたら、とりあえずメモ帳を終了してください」
『ほい閉じた』
「さて、ここからです。まず、もう一度メモ帳を実行して、このファイルを
読み込んでください」
『実行して、【ファイル】を【開く】で、と。うん、開いたよ』
「そうしたら、もうひとつメモ帳を実行して、同じようにこのファイルを読
み込んでください」
『同じファイルをふたつのメモ帳で開くってこと？』
「そういうこと」
『ん、開いたよ。メモ帳ふたつ、両方とも〈いち。〉って書かれてる』
「さて。このふたつのメモ帳ひとつひとつが【プロセス】です。つまり、今
メモ帳のプロセスがふたつあるということになります」
『実行するたびに増える、ね』
「このふたつを、メモ帳Ａ、メモ帳Ｂとします」
『どっちがＡでどっちがＢ？』
「実行した順番とかは関係ないから、どっちでもいいよ」
『はーい』
「さて、プロセスごとの仮想メモリは別々なので、たとえばメモ帳Ａからメ
モ帳Ｂの内容を変える、ということは基本的にできません」
『メモ帳Ａを操作してたらいつの間にかメモ帳Ｂも変わってた、ってことは
ないわけね』
「そのため、プロセスの単位では、自分のメモリが勝手に書き換わるという
こと心配する必要はありません。ですが、メモリの外、たとえばファイルで
は心配する必要があります」
『 test.txt のこと？』
「そういうこと。ここでメモ帳Ａを見てみます。これからする仕事が〈書か
れている数を１増やして保存する〉というものの場合、メモ帳Ａでの作業
は？」
『１増やすんでしょ？　今〈いち。〉って書かれてるんなら〈に。〉？』
「そういうこと。じゃあ火美ちゃん、実際にやってみて」
『ほい。〈いち。〉を消して〈に。〉にして保存、と』
「さて、次はメモ帳Ｂに同じことをしてみて」
『ほい。〈いち。〉って書かれているから〈に。〉で保存、ね』
「ところが、本当はこの時点で test.txt には〈に。〉って書かれているか
ら」
『あ……本当は〈に。〉から〈さん。〉にしなきゃいけない……』
「そういうこと。でもメモ帳Ｂはそのことを知らないから、今メモ帳Ｂが
知っている〈いち。〉を１増やすしかないんです」
『メモ帳Ａでやったのが無駄になっちゃうね』
「もしこれが、インターネットのアクセスカウンターだとしたら」
『げ、お客の数減っちゃう！』
「以上を流れにするとこうなります」

test.txt　　　：〈いち。〉
メモ帳Ａが開く：〈いち。〉
メモ帳Ｂが開く：〈いち。〉
メモ帳Ａが書く：〈に。〉
test.txt　　　：〈に。〉
メモ帳Ｂが書く：〈に。〉
test.txt　　　：〈に。〉

『うーん、ホントに無駄ね……』
「この問題の解決方法は〈メモ帳Ｂは、処理をする前に最新の情報を取得す
る〉ということです」
『メモ帳Ｂが最新情報を取得すれば、メモ帳Ｂは〈に。〉ってことがわかる
からそれを増やして〈さん。〉、ってわけね』
「そのためにはいくつか方法があります」

1.メモ帳Ａが開いている間はメモ帳Ｂは開けないようにする
2.メモ帳Ａが開いている間はメモ帳Ｂは書き込めないようにする
3.メモ帳Ａが閉じたらそのことをメモ帳Ｂに報せるようにする

「この辺が主なところかな」
『確かにこれなら、メモ帳Ｂが間違って書き込むことないね』
「では、この例を実際に試してみましょう。まず Excel を開いて」
『えくせる、ってマイクロソフトのエクセル？』
「そう、その Excel 。これを開いて、最初のセルに〈1〉を入力してくださ
い」
『ほい』
「次に、これを〈他のマシンの共有フォルダ〉に保存してください」
『他のマシン……？』
「そう。今回のテストはネットワーク経由でないとダメだから」
『そうなんだ。ほい』
「で、その〈他のマシン〉からこのファイルを Excel で開きます。これ
が、さっきの例での【メモ帳Ａ】に当たります」
『最初に開いておく方は、他のマシンから、ってわけね』
「次にこれをこのマシンから開きます」
『これが【メモ帳Ｂ】に当たるわけね。あ、なんか出た！』

[使用中のファイル]
test.xls は編集のためロックされています。

「このダイアログそのものが、同期処理のひとつ。普通に開くことができた
ら」
『さっきのメモ帳みたいにまずいことになるもんね』
「で、右側に３つのボタンがあるでしょ」

読み取り専用
通知
キャンセル

「この３つが、さっきの」

2. Excel Ａが開いている間は Excel Ｂは書き込めないようにする
3. Excel Ａが閉じたらそのことを Excel Ｂに報せるようにする
1. Excel Ａが開いている間は Excel Ｂは開けないようにする

「に当たります」
『メモ帳が Excel になってる。あ、あと、順番変わってるのはボタンと合
わせてるから？』
「そう。ひとつひとつ見ていこうか」

読み取り専用
2. Excel Ａが開いている間は Excel Ｂは書き込めないようにする

「このボタンを押すと、開いたファイルは保存できなくなります」
『 Excel Ａと Excel Ｂの両方で修正しても、 Excel Ｂの方は保存できな
いから大丈夫、ってわけね。でも Excel Ｂの方は無駄骨』
「確かに。だからプログラムではこの方法はあまり使わないかな。それこ
そ、ユーザーにこんな感じに選択してもらうときの選択肢のひとつかも」
『不便だもんね』
「では次」

通知
3. Excel Ａが閉じたらそのことを Excel Ｂに報せるようにする

「通常、 Excel Ｂは〈報せが来るまで何もしない〉ようにします」
『何もしない、ただ待つだけ？』
「そう。で、報せが来たらその時点で読み込みます」
『そか、そうすれば Excel Ａが修正した内容がわかるわけね』
「ただし、こういう【待機系】の処理は、タイムアウトが必須になります」
『だよね、ずっと掴まれてたらずっと固まったままだもん』
「それと、この〈報せる〉っていうのを実装するのもちょっと面倒です」
『んー、メッセージ送ったりすればいいんじゃないの？』
「そのためには、 Excel Ｂは〈ファイルを開いているのは Excel Ａ〉とい
うことを調べて、 Excel Ａに〈ファイルを閉じたら自分にメッセージ送っ
て〉と伝えて、そして Excel Ａはその通り実行できなきゃいけない」
『うわ、確かに面倒そう……』
「実際には、同じプロセス同士が情報を共有する形で、誰がどのファイルを
開いているかを知っておく、っていう形になるかな」
『……ねぇ、それってメモリ上？　ならこの前のマルチスレッドってのと同
じじゃん』
「まぁ、結局そうなるんだけどね……さて、３つめの方法」

キャンセル
1. Excel Ａが開いている間は Excel Ｂは開けないようにする

「実際には、 Excel Ｂは少し待ってからもう一度開こうとしてみて、開け
たら開く、開けなかったらまた待つ、っていうのを繰り返すことになりま
す」
『ファイルにロック掛けちゃうわけね。あ、そういえば時々そういうのって
あるよね、なんかファイルを開くことも削除することもできなくなる時っ
て』
「そう、ウィンドウズのファイルシステムに〈ファイルにロックを掛けて、
他のアプリが操作できないようにする〉方法があります」
『ちゃんとそういうのが用意されてるんだ』
「これを【排他処理】っていいます」
『はいたしょり？』
「そう、〈他を排斥する〉、他からのアクセスを拒否する仕組み。これはプ
ログラミング一般の用語だから憶えておいて」
『はーい』
「さて、まとめると、ひとつの共有リソース――たとえばファイル等――に
複数のプロセスが同時に読み書きする場合には、そのタイミングを取る、つ
まり同期を取らなければなりません」
『そうしないと間違った情報を元に処理して書き込んじゃうからね』
「その処理の具体的な方法が【読み取り専用】、【通知】、【キャンセル】
のみっつ。というわけでこれらの実装方法について見ていきます」

/*
    Preview Next Story!
*/
『はー、なんか本格的なアプリって感じ』
「その意識は大事かも？」
『どゆこと？』
「ちゃんと同期を取らないとファイルを壊したりすることもあるから」
『げ、そっか、本格的にしないとまずいってことね』
「というわけで次回」
＜ Version 14.03 ファイルの排他処理 ＞
『につづく！』
「というわけで次回は Excel っぽくしてみます」
『それっていいことなの？』
「ま、排他処理に関しては」


////////////////////////////////////////////////////////////////////
/*                ２００４年８月９日（月）の更新                  */
http://www.kab-studio.biz/index.html

・ほとはーに１話追加予定
　三人合体ホットハーブに一話追加予定。
ごめんなさい、２週お休みになってしまいます……が、この回から９章ス
タート！


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.biz/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
http://www.mag2.com/m/0000012198.htm
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.biz/Info/MailMagazine/

    (C)KAB-studio 1999 - 2004 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

