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

    KAB-studio.h


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

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

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

・お休み……
　ごめんなさい、三人合体ホットハーブも表紙壁紙もお休みです。仕事が忙
しすぎて土日潰れちゃったい……。


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

2004/07/25 (Sun)
　業務連絡。午前中は横浜で色々買い物。んでぐだーっと。外伝２完成。外
伝２のストーリーとか方針とか部数とか。瓶詰妖精ＣＤとゆめりあが良かっ
た。プレデター。叶う夢、叶わない夢。
2004/07/26 (Mon)
　こつこつとバグ＆仕様変更。疲れてる感。辞める気あるん？　目覚まし時
計について。そして業務連絡。

2004/07/27 (Tue)
　ホントやめれー！　残りはそれほどじゃないけど……。西友で久々お刺
身。辞める気とお給料。

2004/07/28 (Wed)
　でかい仕様変更やら計算系バグやら。日曜休出を避けるために。そして
ベルトの穴。

2004/07/29 (Thu)
　急遽改修とかでかなり苦労。なんか疲れた感が……。

2004/07/30 (Fri)
　１２時過ぎまでおしごと。てんてこまいですよー。おそらく日曜も出る
ことに……。終電で疲れた……。

2004/07/31 (Sat)
　秋葉原で最強キーボード 31P8974 購入。スクロール機能とかかなり便
利。午後から休出、１２時まで。そして明日も……。なのでほとはーも
表紙壁紙も休み。液晶プロジェクターも魅力的だなぁ……。


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

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

「前にふたりと戦った帰りに襲ってきた辻っていう人、憶えている？」
　以前、雅樹に向けて発砲した男。
「それで俺は病院送りになったんだ、忘れるわきゃねーだろ」
　病院送り！？　という顔を向ける赤葉。それは心配してというよりは「有
り得ない」という表情だった。
「あの人は、元々は私達のスタッフだった……違う、私達が元々彼と同じ場
所にいた」
「前に言ってた……そう、天地生物科学工業ってとこだ」
　……穂香さんがいたらカンニングし放題ね……。
「そう。そこをずっと見張っていたら、この前、何者かがそこから出て行っ
て、ここに来た」
「それは、舞殿が来られた次の日のことか？」
「あいつのことか……」
　奇声を発していた、ＡＰらしき男。
「ＡＰって、あんた達だけじゃなかったのか？」
「私達だけ。ＡＰの数は全部で５人、全て私達、ファインダウト社の管轄。
その男、たぶんＡＰじゃない。辻が襲ってきた日のこと、憶えてる？」
「あのでかいゴリラみたいなのが……そうか、あれを人間に応用した……の
がＡＰじゃないのか？」
「逆。本来、ＡＰの技術は人間専用。それを応用したのが、あの動物を改造
したもの。その方が兵器として応用が利くと考えていたらしいけど。この技
術を再び人間向けにしたもの、のようね」
「なんか遠回りだな」
「ＡＰのコアは、人間の理解の範疇を超えてるから……だから、その情報が
あるだけでは、それを元にＡＰを作ることは不可能。実際、作られなかった
わけだから」
「？　じゃあ辻ってのは、ＡＰを作るための情報も持ってるってことか？」
「……ファインダウト社から盗まれたの、情報が」
「盗まれたぁ？」
「ちょうどあの日、私達全員ファインダウト社から出ていたから」
「空き巣ね……」
「なるほど、あれはそれで作られた実験体第一号ってところか」
　つい先日ここを襲った、あのＡＰらしき男。確かにその姿は、ＡＰとは違
う異質なものだった。
「それで……」
　リシュネはティーカップをソーサーに置いてから、言った。
「その盗まれた情報の中に、ここの場所が入っていたの」
                                                              (続く)


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

　Version 14.01
マルチスレッドって？

「さて、今回からは、いわゆる【マルチスレッド】について説明していきま
す」
『マルチスレッドってよく聞くよねー』
「もう今では使いこなせないと困る機能のひとつになっているからね。でも
プログラムとして組むときには実はものすごく気を付けて使わなきゃいけな
い機能でもあるんです」
『そんなに気を付けなきゃいけないの？』
「そう、特にバグが出ても原因がわかりにいくのが一番の難点」
『げげげ』
「今回もそういった細かい所に触れつつ進めていくからねー」
『はーい』
「さて、まずは全体の概要について説明します。【マルチスレッド】は、プ
ログラムの〈流れ〉を増やすことを指します」
『プログラムの流れ？』
「たとえば」

void OutputTest( int p_i )
{
    TRACE( "p_i = %d\n", p_i );
    p_i += 200;
    TRACE( "p_i = %d\n", p_i );
}

「という関数を呼び出す場合を考えます。普通に２度呼ぶ場合には」

void Use_OutputTest()
{
    OutputTest( 100 );    // ←Ａ
    OutputTest( 200 );    // ←Ｂ
}

「という感じになります」
『当然よねー』
「このとき、必ずＡの呼び出しが終わってから、Ｂの呼び出しが行われま
す」
『当然よねー……それがなんないのがマルチスレッドってこと？』
「そういうこと。マルチスレッドを使うと、Ａの処理が終わる前にＢを呼び
出すことができます」
『……それってメリットあるの？』
「ん、この例だから良さそうに見えないのかな。たとえば」

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

「という感じに、〈指定したドライブのファイル一覧を取得する関数〉を呼
ぶ場合、 C ドライブと D ドライブが別のハードディスクなら、両方同時に
アクセスした方が早くなります」
『そか、これなら同時にやった方が早いよね』
「ただ、マルチスレッドが難しいのは、これをちゃんと使える形で実装する
のが大変ってところ」
『そなの？　簡単そうに見えるけど』
「じゃあまず、出力結果を画面に表示するときはどうすればいい？」
『ん？　まず C ドライブのを出力して、次に D ドライブのを出力して』
「 D ドライブの取得が先に終わったら？」
『 C ドライブが取得できるまで待つ……そっか、待たなきゃいけないんだ』
「そういうこと。つまり」

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

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

「という感じ」
『うわ、面倒そう……しかも、待つ、って全然どうやっていいかわからない
し』
「それに、この形式で処理すると、ユーザーがキャンセルできません」
『げ！』
「そのためにまたマルチスレッド使ったりしてややこしいことになったり」
『ううう……なんかすごく面倒そう』
「もうひとつの問題は【同期】です」
『どうき？』
「英語で書くと Synchronization 」
『あ、シンクロってよく言うよね、一緒にタイミング合わせるのとか。それ
が同期？』
「そういうこと。マルチスレッドは複数の処理が同時に実行されるので、同
時に何かにアクセスする時にはタイミングを取る必要があります。たとえば
先ほどのファイル一覧取得の部分」

void Use_ファイル一覧取得関数()
{
    CStringArray cFileListStrAry;

    ファイル一覧取得関数( "C", &cFileListStrAry );
    ファイル一覧取得関数( "D", &cFileListStrAry );
}

「という形で cFileStrAry のポインタを渡して、そこにふたつの関数から
ファイルパスを追加してもらう、という処理をしてもらう場合」
『よくありそうなパターンね』
「ところが、これは恐らくうまくいきません」
『へ？』
「変数に対して複数のスレッドからアクセスすると〈一方が読み込んでいる
間に一方が書き込む〉ということが起きてしまうんです」
『それって問題？』
「うん。これは結構難しい問題だから、あとでちゃんと説明します。ここで
は、複数のスレッドからひとつの変数にアクセスする場合には同期を取らな
きゃいけない、ってことを憶えておいて」
『同期を取る、って具体的には？』
「たとえば〈スレッドＡが cFileListStrAry にアクセスする〉という場
合、〈スレッドＢが、スレッドＡのアクセスが終わってからアクセスする〉
というふうに待つこと、これが【同期を取る】ということです」
『待つことが同期？』
「そういうこと。アクセスできる時にどんどんアクセスする、ってことじゃ
なくて、アクセスの許可が出るまで待つ、ってこと」
『交通整理みたいな感じ？』
「うーん、例を挙げるなら、もちつきかな」
『もちつき？』
「杵を持つ人がふたり、おもちをこねる人がひとりいるとすると」

杵Ａが叩く
おもちをこねる
杵Ｂが叩く
おもちをこねる
杵Ａが叩く
おもちをこねる
杵Ｂが叩く
おもちをこねる
...

「というふうにするのが【同期を取る】ってこと。同期を取らない、つまり
待たずにすると」

杵Ａが叩く
杵Ｂが叩く
おもちをこねる
杵Ｂが叩く
杵Ａが叩く
おもちをこねる
おもちをこねる
杵Ａが手を叩く

『大惨事！！』
「ということになってしまいます」
『プログラムでもこういうことが起きちゃう？』
「起きちゃうんです。時には本当に致命的なことに……」
『あわわわわ……』
「ウィンドウズでは API レベルで同期を取るシステムが備わっているの
で、それについては本解説で説明します」
『はーい』
「さて、今の説明はプログラムの中の話でした。でも実際には、プログラム
とプログラムの間でも、同様の問題は発生します」
『プログラムとプログラム？』
「プログラムまるまるひとつ、つまり exe のこと」
『実行ファイルってこと？』
「そういうこと。実行ファイルは、当然いくつも同時に実行できるよね」
『あ”　それってある意味、マルチスレッドと同じ……でもさ、確か、他の
実行ファイルの変数ってアクセスできないよね』
「そう、基本的に変数はアクセスできません。でも変数以外にも共通してア
クセスできるものはたくさんあるでしょ。ファイルとか」
『あ”……』
「実はこっちの方がよくあるパターンで、しかも同じように気を付けなきゃ
いけないことが多いんです」
『確かに、複数立ち上げて複数アクセス、あり得る……』
「というわけで、説明はこちらの実行ファイルと同期の問題から説明しま
す」
『はーい』
「それと、プログラムそのものの仕組み、みたいなものも説明します」
『ぷぷぷ、プログラムそのものって、なんか難しそうなんですけど？』
「うん、難しい」
『げげ！』
「たとえば【関数】ってなんなのか」
『なんなのかって……なんなの？』
「そういうことの説明」
『そんなのがマルチスレッドと関係あるの？』
「大いにあるんです。スレッドっていうのは中身寄りのものだから、そう
いった説明も必要になります」
『ううう、ちょっと苦手かも……』
「 C++ でプログラムを作るっていうことはそういうことも知っていないと
いけないってことだから、その辺は覚悟しておいて」
『はぁい……』

/*
    Preview Next Story!
*/
『いっつもそうなんだけど、話だけ聞くとそんなに難しそうじゃないよね』
「マルチスレッドは特にそうかも」
『……それはつまり……』
「プログラムに組んでみると難しい、ってこと」
『げげげ！』
「というわけで次回」
＜ Version 14.02 プロセスと同期 ＞
『につづく！』
「ま、次回はまだ概念の話だから大丈夫」
『……大丈夫なのは次回だけね……』


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

