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

    KAB-studio.h


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

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

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

・ほとはー９の４追加！
　三人合体ホットハーブに「９の４ 真エンド」を追加！
[ 三人合体ホットハーブ ]
http://www.kab-studio.biz/Comic/HotHerb/index.html


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

2004/08/29 (Sun)
　描いてみないとわからない。まずほとはーの主線を描きつつＨＤ→ＤＶＤ
のコピー。部屋の片付け。１０時にほとはー完成。疲れた……。 KURAU 、
いい……。ダイエット始めます。「描いてみないとわからない」の理由。

2004/08/30 (Mon)
　だるくて会社休みました。体全体にだるさとしびれが……。音楽流しっぱ
なしにしてぐだーっと。Machician本編、さくさく書けるなぁ。眠い……。

2004/08/31 (Tue)
　体調復活で仕事は順調に。８月はほとんど残業してないなぁ。ダイエット
のためにお刺身を。マドラックスはなんかもったいない。 Ever17 したい。
そして近況報告。

2004/08/01 (Wed)
　ヒマだけど……。そして引き継ぎの準備。帰ってくるとなぜか疲労感たっ
ぷり。Ｚガンダムが見たくなってきた。

2004/09/02 (Thu)
　２時くらいまで仕様変更対応、そのあとドキュメント起こし。複雑な事
情。ペッパーライス。メロンブックスで色々買ったり。９０００円。時間が
ない……。そしてワンルームマンション。

2004/09/03 (Fri)
　仕様変更をこつこつと。 Perl の経歴。帰ってからは KURAU とかＮスペ
とかを。入荷監視アンテナ始めました。私用ですがパブリック。表紙壁紙、
描くかどうか。

2004/09/04 (Sat)
　回復力落ちてる？　午前中は洗濯、午後は……何してたかなぁ、憶えてな
い……。ルミナスプラス到着。ほとはーはほぼ描き上がりました。表紙壁紙
はMachicianに。こんなに気合い入れる予定はなかったけど、素材はいいん
で。


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

■　第十章　剣と魔法　−２２−

「もう、ホントにこんなになるまで！」
　ヘリの中、強い照明が舞を照らす。闇夜ではわからなかった、肌のひび。
それを覆い隠ように、薬剤に浸けたガーゼを貼っていく。
「先生、ありがとう」
「えっ！？」
　滅多に見せない笑顔を見て、智子は驚いていた。
「先生の、おかげだから」
「……私は、何も、何もしなかっただけなんだから」
　何もしなかった。
　横に座る洋一を智子は恐る恐る伺うが、怒るどころかむしろ喜んでいた。
「ヘリを出すって言ったのは君なんだから。何もしてなくなんて、ないよ」
　そう言ってから、リシュネの隣に座り直す。
「楽しかったか？」
　何も言わずに、頷いた。
「チクってきたのか？」
「はい」
　はっきりと声に出して答えた。
「で？」
「……９月に、来るって」
「妥当なところだな。でも９月か……先生役、やってもらえる？」
　上目遣いで智子を見る洋一。負い目もあるし、なによりその目で見られた
ら、嫌とは言えない。
「……まぁ、高校生なら教えられると思うけど……」
「私も教わりたい」
「うん、いいわよ」
　リシュネには、素直に答えられた。
「でもその前に治療ね」
「どのくらいかかる？」
　さっと上から下まで見て、ひびの入り具合を判断する。
「ちょっと中から診ないといけないから、少しかかるかも」
「はい」
　罰なのだから当然だし、このリスクを負うことは覚悟していた。
　半日もなかった、でも、それでも来て良かった、そう思った。
                                                        (第十章　完)

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

　Version 14.06
ミューテックスで排他処理

「今回は、前回作ったミューテックスのプログラムを実際に動かして、排他
処理がどのように行われるのか確認してみます」
『おー』
「まず、前回作ったのと同様のプログラムをあともうふたつ作ってくださ
い」
『……へ？　ボタン作ってイベントハンドラ作って、ってのをあと２回？』
「そう。プロジェクト名は ProcessB と ProcessC 。もちろん、各ボタンを
押したら前回の５つの関数が呼ばれるようにしてください」
『はい、できたよ……』
「まぁ、本当はワークスペースのフォルダまるごと複製しても良かったんだ
けど」
『！！』
「でもプロジェクト名とかも変えた方がわかりやすいから、ね？」
『ううう……』
「それと、前回のも含めて、 ProcessA ProcessB ProcessC の３つの
プロジェクトを、それぞれ別の VC++ で開いてください」
『え！？　 VC って一度に３つもあげられるの？』
「うん、 VC そのものは SDI だから」
『そういえばそんな複雑な話あったね……でもなんでわざわざ VC を？』
「こうすれば、それぞれ独立してデバッグ実行できるから」
『あー』
「そうすればわかりやすいからね。さて、前回紹介したプログラムには、次
の５つの関数があります」

Create()     // ミューテックスを作成します。
Open()       // ミューテックスを取得します。
Wait()       // ミューテックスを監視して待機状態に入ります。
Release()    // ミューテックスを手放します。
Close()      // ミューテックスを削除します。

『これを各ボタンで呼ぶようにしたんだよね』
「そう、だから今はそれぞれいつでも呼べる状態になっているはず。そこで
まずミューテックスを作ってみます。 ProcessA を実行して、 Create() を
呼びます」

ProcessA::Create()

『ほい』
「成功すれば、アウトプットウィンドウにハンドルが出力されます」
『出たよ』
「これで "ProcessesMutex" という名前のミューテックスが作られました」
『おぉ』
「終了する時には、 Close() を呼んでミューテックスを削除してくださ
い」
『忘れたら？』
「別に問題ないかも……同じ名前のミューテックスなら何度作ってもひとつ
だけだし」
『あ、そっか』
「さて、前回説明したように、現在のコードでは Create() を呼ぶとその場
で取得します。つまり、現在は ProcessA がこのミューテックスを持ってい
るわけです」
『 ProcessA が持ってる、と』
「次に、 ProcessB を実行してください」
『ほい実行』
「この時点では ProcessB は ProcessA が作ったミューテックスを持ってい
ないので、ここで開きます。 ProcessB の Open() を呼び出してください」

ProcessB::Open()

『ほい。あ、ハンドル出た。あ！　ProcessA のと同じ！』
「あ、これはたまたま」
『へ？』
「同期オブジェクトのハンドルはプロセス毎に違うから。ウィンドウハンド
ルみたいなグローバルなものじゃないんだよね」
『む……喜んで損した』
「でもそういう視点を持つことは重要だよ」
『フォローありがとー』
「う……。で、ここで ProcessB は ProcessA が作ったミューテックスを開
いたわけだけど、この段階では所有権はありません」
『 ProcessA が持ってるから？』
「そういうこと。それを確認するため、 ProcessB で Wait() を呼び出して
ください」

ProcessB::Wait()

『ほい。あ、待ち続けてる……』
「 ProcessB は ProcessA が作ったミューテックスの監視を始めました。と
いうことは、監視が終わるのは？」
『 ProcessA が手放したとき！』
「というわけで、 ProcessA の Release() を呼び出してください」

ProcessA::Release()

『ほい。あ、 ProcessB で【待機終了】って出た！』
「というわけで、 ProcessA がミューテックスを解放すれば、 ProcessB の
監視状態が解かれるわけです。図にすると……」

ProcessA                              ProcessB
Create() でミューテックス           
"ProcessesMutex" の作成及び所有。   
                                      Open() でミューテックスを取得。
                                      "ProcessesMutex" と同じもの。
                                      Wait() で "ProcessesMutex" を
"ProcessesMutex" 所有中 ←←←←←←←監視開始。
"ProcessesMutex" 所有中               （監視中）
Release() で解放→→→→→→→→→→→監視終了。
"ProcessesMutex" の所有権喪失。       "ProcessesMutex" を所有。

『んー、よーするに "ProcessesMutex" はひとつだけ、ってことねー』
「そういうこと。それがミューテックスの一番の特徴かな。ミューテックス
っていう〈バトン〉は、名前ごとにひとつだけ」
『 ProcessA が持ってるあいだは ProcessB は待ち続ける、 ProcessA が手
放したら今度は ProcessB にそのバトンが渡される』
「 ProcessB に渡された証拠に、この状態で ProcessA の Wait() を呼ぶ
と」
『お、【待機開始】した』
「で、 ProcessB の Release() を呼ぶと」
『【待機終了】！　なるほどねー、 ProcessA と ProcessB でバトンを交換
しあってるわけね』
「では、今度は〈みっつのプロセスでバトンを待つ〉というのをしてみま
す。一度全部閉じてから、みっつの VC で ProcessA ProcessB ProcessC を
実行して」
『ほいほいほい』
「次に」

ProcessA::Create()
ProcessB::Open()
ProcessC::Open()
ProcessB::Wait()
ProcessC::Wait()

「とします」
『ミューテックスを持ってんのは ProcessA で、それを ProcessB と 
ProcessC が待つわけね。お、両方とも待ち始めたよ』
「この状態で」

ProcessA::Release()

「と、 ProcessA の Release() を呼ぶと」
『ミューテックス、解放！　ProcessB に【待機終了】って出た……けど、
ProcessC はまだ待ちっぱなし』
「だって、バトンはひとつだから」
『あ！　そっか、バトンは ProcessB に渡ってるから、 ProcessC はまだ
待ってるんだ……』
「 ProcessB が ProcessC よりも先に待ち始めたから、 ProcessA が手放し
た時のシグナルは ProcessB にだけ送られます」
『そうすると ProcessB はシグナルを受け取って待つのをやめる』
「 ProcessC はシグナルが送られてこないのでまだ待ち続けます。そこで」

ProcessB::Release()

「と、 ProcessB の Release() を呼ぶと」
『 ProcessC の【待機終了】って出た！　なるほど、 ProcessB が手放すと
バトンが ProcessC に渡されるわけね』
「そういうこと。図で書くと」

ProcessA                ProcessB                ProcessC
Create() 作成                                   
及び所有。                                      
所有中                  Open() で取得。         
所有中                                          Open() で取得。
所有中←←←←←←←←←Wait() で監視開始。
所有中←←←←←←←←←←←←←←←←←←←←←Wait() で監視開始。
所有中                 （監視中）              （監視中）
Release() で解放。→→→監視終了。             （監視中）
                        所有中                 （監視中）
                        Release() で解放。→→→監視終了。

『なるほどねー』
「こういった処理は、たとえばファイルアクセスの排他処理に使用します。
〈所有中〉の間だけファイルアクセスができるようにする、とか」
『そっか、そうすればファイルにアクセスできるのは１プロセスだけ！』
「そういうこと。まさに排他制御、ミューテックスらしい使い方というわけ
です」
『あ、でもこの前ファイルの排他制御やったけど……』
「ファイルの排他制御だと、終わったことを報せるのが面倒だから」
『あ、ってゆーか、同期オブジェクトは〈終わったことを報せる〉のが簡単
なんだね』
「そうだね、 API ひとつで監視することができるから。ただ、実際にはこ
れらを組み合わせるのが一番かな」
『そういえばそんなこと言ってたね』
「今回は複数のプロセスを使った例だけど、これをスレッドで実現すると」

・ファイルへのアクセスは１プロセスのみ。
・複数の処理をする際には必要な数だけスレッドを作る。
・ファイルへのアクセスはミューテックスを使用して管理する。

「こうすれば、ファイルに複数のスレッドから同時に書き込むことはなくな
ります」
『ミューテックスってバトンを持ったスレッドだけがファイルにアクセスで
きる、ってわけね』

/*
    Preview Next Story!
*/
『こういうふうにひとつずつ追っていくとわかりやすいね』
「まぁバトンみたいなものとして作られたからね」
『そう考えると簡単簡単』
「でもだからこその問題があるんだよねー」
『え”』
「というわけで次回」
＜ Version 14.07 デッドロック！ ＞
『につづく！』
「はまると怖い罠がそこには棲んでいるのです……」
『んー全然怖くない』
「はまって４徹」
『怖！！』


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

・９月表紙壁紙
　毎月恒例、新しい表紙です。
　今回はMachicianです。「Machicianとはなんぞや」という人はかぶろぐへ
ゴー。

・ほとはーに１話追加
　三人合体ホットハーブに一話追加します。今回は表紙壁紙があるからって
休みませんよー。たぶん。


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
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
*/
////////////////////////////////////////////////////////////////////

