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

    KAB-studio.h


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

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

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

・KAB-studio.h 縮刷版更新
　KAB-studio.h が２７０号に達したので縮刷版を更新しました。
　ダウンロードはダウンロードルームにて。
[ ダウンロードルーム ]
http://www.kab-studio.biz/Freeware/index.html#MailMagazine

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


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

2004/08/15 (Sun)
　夏コミへ。企業ブースと壁をぐるっと。帰ってからはだらだらとほとはー
描き。マリみて、小説読まないと……。

2004/08/16 (Mon)
　ひたすらバグ潰し。しかも自分が原因……。休みのためにがんばる。冬コ
ミ申込み。切手を何枚貼るか。劇場版AIR、大阪版ＣＭ。

2004/08/17 (Tue)
　引きつづきバグ潰し。１泊２日の旅行に行ってきます。かぶろぐもメール
も見られます。帰りにヨドバシで DTP WORLD 買ったり。

2004/08/18 (Wed)
　旅行中……。

2004/08/19 (Thu)
　旅行から帰ってきました。新撰組と蟹と神社の２日間。

2004/08/20 (Fri)
　バグ＆仕様変更ががーっと増えてがーっと潰して。帰りに秋葉原で色々購
入。明日の予定。そして肉体年齢と蟹。

2004/08/21 (Sat)
　アマゾンからゆめりあ５巻とか送ってくる。午後に秋葉原に行って劇場版
AIR前売り券購入。らくえんサントラは１０月８日発売らしい……。昼寝。
ゆめりあ５巻がかなりいい感じだ……。


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

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

　古風な板敷きの間に並べられた色とりどりの薬。錠剤、粉薬、アンプル
と、様々な薬が並んでいた。
　袋を破って取り出した注射器を、慣れた手つきでアンプルに差す。その手
並みを舞はじっと見つめる。
「……何？」
「……痛そうだな、と思って」
「ＡＰだから、痛覚はカットできるから」
「あ、うん……」
　また、便利だなと思ってしまった自分を恥じる。こんな薬を数時間おきに
打たなきゃいけない体のどこが便利なのか。
「ただ、研究は進んでるから、近い将来こういうメンテナンスはしなくて済
むようになるって、先生が言ってた」
「薬なしで普通に生活できる、ってこと？」
「それが本来の姿だから」
　ＡＰ本来の姿。
　一歩進んだ、普通のひと。
「リシュネは、なんでＡＰに？」
　訊いて、しまった、と思った。
「……病気」
「びょう……き？」
「ＨＩＶ。染された」
　無意識に手が下腹部をさする。
「ＡＰになれば病気が治った。それだけ」
「……ごめん」
「ううん」
　リシュネは、微笑んでいた。
　こんなに自然に言えるとは、思ってもみなかったから。
「それに……さっきも言ったけど、私は自分の意志でＡＰになったし、ＡＰ
になって良かったと思ってる」
「うん、それは判る」
　その言葉に、リシュネはきょとんとした。
「だって、リシュネって、迷いがないっていうか、そういう感じなんだも
の」
「……」
　そうか。そうなのかも、しれない。
                                                              (続く)

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

　Version 14.04
同期オブジェクト

「前回はファイルの排他処理について説明しました」
『他のアプリが書き込めないようにする方法だよねー』
「でも、あの方法にはデメリットもあります」

■メリット
・お手軽
・他のアプリからファイルを守る

■デメリット
・同じアプリでもプロセスが違うとアクセスできない
・通知が面倒

「このメリット・デメリットを考えると、最終的に一番いいのは」

・ファイルはリードオンリーにしてひらく。
・ファイルにアクセスするのは１プロセスのみとする。
・ファイルにアクセスできるプロセス２つ以上実行しない。

「という形になります」
『ファイルアクセスはひとつだけ、他は……他は？』
「そのプロセスにアクセスしてデータを取得したり、マルチスレッドを
使ったり」
『あの〈複数同時に処理できる〉ってヤツね』
「マルチスレッドについてはあとに取っておくとして、まずはプロセス単位
での処理について見ていきます」
『はーい』
「プロセス内や複数のプロセス間で同期を取る方法はいくつかあります。メ
モリを共有したり、ひとつのプロセスを使って管理させたりと……でも、
API には実は同期処理専用のシステムが用意されてるんです」
『専用のシステム？』
「そう、その名も【同期オブジェクト】」
『どうきおぶじぇくと、ってそのまんまね』
「 API の同期オブジェクトには５種類あります」

ミューテックス （ Mutex ）
セマフォ （ Semaphore ）
タイマー （ Waitable timer ）
イベント （ Event ）
クリティカルセクション （ Critical Section ）

『うわー、なんか聞き慣れない英単語が結構ある……』
「さて、簡単にどういう機能を持つか説明するけど、そのまえにひとつ用語
を憶えてもらいます」
『げ』
「用語は【シグナル】」
『しぐなる？　信号とかの？』
「そう、あのシグナル。まず、同期オブジェクトはシグナルを持っていま
す」
『信号機が内蔵されてるみたいな感じね』
「で、 API には【シグナルを見張る関数】があります」
『同期オブジェクトの中の信号を見張る、ってこと？』
「そういうこと。この関数は、シグナルがオフの間はずーっと見張り続けて
いて、オンになったら見張るのをやめます」
『見張るのをやめる？』
「具体的に言うと関数から返るってこと」
『……ってことは、その関数を呼ぶと、同期オブジェクトのシグナルがオン
にならない限り戻ってこない、と』
「ただ制限時間をつけることができるから、その制限時間内にオンにならな
くても自動的に返ってきます」
『オンになるか、時間になるか、ね』
「これが重要なのは、 Version 14.01 ( No.268 ) で」

void Use_ファイル一覧取得関数()
{
    ファイル一覧取得関数( "C" );
    ファイル一覧取得関数( "D" );

    両方取得するまで待つ();
    ファイル一覧を出力する( C ドライブ );
    ファイル一覧を出力する( D ドライブ );
}

『あ！　両方取得するまで待つ！！』
「そういうこと。この関数を使うことで〈終わるまで待つ〉ことができるん
です」
『便利……っていうか、こういうのがちゃんと用意されてるってことだね』
「そういうこと。さて、この待つ方はいいとして、今度は同期オブジェクト
の話。同期オブジェクトには今言ったようにシグナルが内蔵されているんだ
けど、それぞれ〈オンにする方法〉が異なるんです」
『それを使い分けなきゃいけない、と』
「そういうこと。というわけで、ひとつずつ見ていきます。

ミューテックス （ Mutex ）

『みゅーてっくす、ねぇ。なんか化学製品みたい』
「これは略語で、本当は【 MUTually EXclusive 】っていいます」
『みゅーちゃりぃえくすくるーしぶ？』
「日本語で言うと【相互排他】」
『あ、排他処理！』
「その排他。この同期オブジェクトは単純な排他処理をしたい場合に使いま
す。たとえば、プロセスＡが〈テスト〉という名前のミューテックスを作る
とします」
『名前を付けられるんだ』
「普通はアプリのフルパスを名前にするんだけど今回はわかりやすく。で、
次にプロセスＢから〈テスト〉って名前のミューテックスを作ろうとする
と、既に作られているのが返されます」
『プロセスが違っても同じものってこと？』
「そういうこと。ウィンドウズシステム内のものだからね。さて、この 
ミューテックスのシグナルは、初めは〈オフ〉になっています」
『さっきのシグナルね』
「そのため、プロセスＢがこのミューテックスのシグナルを監視すると、当
面はそこで待機することになります」
『シグナルがオフだもんね。で、それをオンにするには？』
「プロセスＡが〈テスト〉ミューテックスを手放せばオンになります」
『それだけ？』
「それだけ。つまりミューテックスは〈所有者が手放すとオンになる〉とい
うことです」
『……なんか拍子抜け……つまり、』

【プロセスＡ】                    【プロセスＢ】
Mutex〈テスト〉 作成
（この状態でシグナルオフ）
                                  Mutex〈テスト〉を監視開始。
                                  シグナルオフなので待機中……。
Mutex〈テスト〉を解放
シグナル：オン→→→→→→→→→→待機終了。
　　　　　　　　　　　　　　　　　処理再開。

『って感じ？』
「そういうこと。こうすることで、実際の処理がたったひとつのプロセスで
だけ行われるようにすることができます」
『ほー』
「さらに、ミューテックス〈テスト〉をふたつのプロセスで監視していた場
合は、先に監視していたプロセスにだけ通知されて、後から監視したプロセスはその
まま待機を継続します」
『？』
「つまり」

（プロセスＡは上記と同じ）
  【プロセスＢ】                  【プロセスＣ】


  Mutex〈テスト〉を監視開始。     
  シグナルオフなので待機中……。  
                                  Mutex〈テスト〉を監視開始。
                                  シグナルオフなので待機中……。
→待機終了。                      （監視開始がプロセスＢより遅い
　処理再開。                      ので、シグナルはオンになりません）
Mutex〈テスト〉を解放
シグナル：オン→→→→→→→→→→待機終了。
　　　　　　　　　　　　　　　　　処理再開。

「というふうになります」
『んー、つまりバトンはひとつ、ってこと？』
「そういうこと。この機能を使えば簡単に同期を取ることができます」
『なんかこれひとつあれば結構できそうだけど……他は？』
「では、次はセマフォ」

セマフォ （ Semaphore ）

「意味は〈信号機〉」
『こっちの方が同期オブジェクトらしいね……』
「セマフォはほとんどミューテックスと同じ。違うのは、カウンターが付い
ているところ」
『カウンター？　数数えるの？』
「そう。さっきの火美ちゃんの例で言うと、〈バトンがひとつ〉なのが
ミューテックス、〈バトンが複数個ある〉のがセマフォ」
『バトンが複数個？　さっきの例だと……たとえばバトンふたつなら、
プロセスＡと一緒にプロセスＢも動けて、でもプロセスＣは待つみたい
な？』
「そういうこと。セマフォは、同時の処理を２つ以上するけど、でも有限個
にしたい場合に使います。次はタイマー」

タイマー （ Waitable timer ）

「これは一定時間毎にシグナルがオンになる、それだけの機能」
『これはちょっと他と違うね』
「というかミューテックスとセマフォが似てるってだけかも」
『ってことは、他の同期オブジェクトもだいぶ違う？』
「だいぶってほどではないかな……」

イベント （ Event ）

「イベントは、シグナルのオンとオフを切り替えることができる同期オブ
ジェクトです」
『？？？　それってミューテックスとかと同じじゃん』
「それは違うよ。ミューテックスは、プロセスＡが解放した時、シグナルが
オンになったのを伝えられたのはプロセスＢだけ。プロセスＣからは
シグナルがオフって見えていたんです」
『そういえば待ち続けているんだもんね』
「さらに、そのあと他のプロセスがミューテックスを監視したときには、
プロセスＢが持っている間はシグナルがオフになっています」
『そか、常に誰かが持ってるから、シグナルがオンになるのは一瞬……』
「それに対して、イベントはシグナルをオンにするとオンになりっぱなし」
『おお』
「そして、オンになったことを全員知ることができるから」
『全員待機から抜けるね』
「機能的にはこっちの方が信号っぽいかもね。では最後」

クリティカルセクション （ Critical Section ）

「クリティカルセクションは他の同期オブジェクトとは全く違っていて、
〈プログラム〉に排他処理を行います」
『プログラム……に？』
「たとえばある関数を同時に複数のプロセスが実行できないようにする、と
か。ファイルや変数じゃなく、プログラムのコードに排他処理をするってこ
と」
『んー？？？』
「いまいちメリットがつかめないのかもね……まぁその辺はあとで詳しく」

/*
    Preview Next Story!
*/
「次回は実際にミューテックスを作ってみます」
『簡単？　難しい？』
「作るだけなら簡単」
『使う時は？』
「使うだけでも簡単」
『じゃあいつ難しいの！？』
「というわけで次回」
＜ Version 14.05 ミューテックスを使おう！ ＞
『につづく！』
「難しくないんです」
『なぁんだー』
「嘘ですごめん」
『！！』


////////////////////////////////////////////////////////////////////
/*                ２００４年８月３０日（月）の更新                */
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
*/
////////////////////////////////////////////////////////////////////

