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

    KAB-studio.h


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

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

/*                         来週はお休み                           */

　来週、９月２０日分の配信はお休みします。毎年恒例の夏休みです。
　盆と正月に休むとちょうど年５０号になるので（爆）。
　今回、ホームページの方は通常営業なのでご安心ください。


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

・ほとはー９の５追加！
　三人合体ホットハーブに「９の５ 素シナリオ」を追加！
[ 三人合体ホットハーブ ]
http://www.kab-studio.biz/Comic/HotHerb/index.html

・Machicianスタート
　Machicianという小説をかぶろぐ内で連載開始！
　……時は２０２２年、魔法の国からやってきた王子と、小さな町に住む女
子高生との恋の物語……とか、ツッコミの激しい巫女さんと掛け合い漫才を
する……とか、小豆ジャージに水中眼鏡掛けた女の子と魔法合戦したりする
……とかいうなんか謎な物語。
　設定は風雅、舞いやほとはーとリンクしてるのでそちらの読者の方も是非。
[ Machician ]
http://d.hatena.ne.jp/kab_studio/20040823#1093276416
[ かぶろぐ。 ]
http://d.hatena.ne.jp/kab_studio/


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

2004/09/05 (Sun)
　午前中はのんびり。午後は表紙壁紙描き。Machicianの。足りない……。
Machicianロゴ。フォトショの基本。ぎゅっと詰まった時間がないのが。
マリみては演出が秀逸。

2004/09/06 (Mon)
　普通におしごと。主任さんとお話。新機能追加……。ハバネロ焼きそば。
時間があっという間に過ぎる。効率悪いなぁ……。

2004/09/07 (Tue)
　なぜか仕事中クラクラ。おしごとの中身的には１機能の１画面分作成。
おでんダイエット中。でも……。激★店のくらにゃどビッグタオルがちょっ
と欲しくなる。そして利益重視ネタ。

2004/09/08 (Wed)
　おしごとは昨日の続きを終わらせて。夏休みモード？　おでんダイエット
開始。かぶろぐとの関係。そして利益重視、の続き。そして２０サイト。

2004/09/09 (Thu)
　午前中はミーティング。交代要員の話とか。新機能で右往左往。ちゃんと
してくれー。まわりは辞めていく……。メロンブックスでコミックス数冊購
入。恐るべしはてなダイアリー。絢爛舞踏祭はエステルがもったいない。そ
しておでんダイエット。

2004/09/10 (Fri)
　計算系のやつをさくっと完了。１０連休取れるかも？　つかいつの間に
洗脳された？　帰りにしゃぶしゃぶ食べ放題。書けそうで書けない。 
KURAU は再会シーン良かったけど……。明日あさっての予定。

2004/09/11 (Sat)
　だらーっと。ガンスリDVD、微妙なところはあるけど全体的にはよし。
音楽をそれだけで時間が過ぎる。ＡＶ面ではかなり充実。がんばって
ほとはー完成させて明日はMachician。


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

■　第十一章　ファインダウト社　−１−

　碧き泉を包むように生い茂る森の中。
　俊雄と恭子は編んだ縄を木にくくりつけ、読むことはできないが意味はわ
かる護符を結びつける。
「終わった？」
「うん、次行こ」
　ふたりは隣の木へと移り、ふたりがいた木へ舞の母、美咲が来る。護符が
ちゃんと着けられているか確認してから、触れ、念じる。見た目には変わら
ないが、美咲はその結果を視てから、次の木へと移る。
「終わりましたー！」
　道なりになった斜面から恭子が手を振る。泉を囲むように巡らされた結界
は、ただひとつの道でひとつに綴じようとしていた。
「ふたりともご苦労様」
「いえ、居候させてもらっているんですから」
　ふたりは当然という顔をした。
「でも、この護符ってこの前のと違いますよね」
　恭子は護符を手に取る。以前のものより強力なことがなんとなくわかる。
「違うのよ、前のが切れちゃっただけ」
「え”」
　今では入手困難な護符は無駄遣いできないが、泉を包むように張り巡ら
し、そのうえ風雨で長い間もたないとあって、消費量は激しかった。
「話じゃ結構できるっていうし、ここを捨てるわけにもいかないし、かと
いって攻めてくる気配もないし、こっちから攻め入るだけの準備もないし」
「物騒なこと言いますね……」
「今回の護符は強力だし対物障壁もあるから剥がれにくいはずよ。そのぶん
……私も含めてむやみに出入りはできなくなるけど」
「前みたいに私達だけ出入り自由、っていうわけじゃないんですか？」
「そう。今回は無差別だから。そういえば舞がもうすぐ帰ってくるのよね、
言っておかないと」
「もうおそーい」
　森の中から、ひりひりした手を振って舞が出てきた。
                                                              (続く)

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

　Version 14.07
デッドロック！

「今回は、同期処理において最も注意しなければならない【デッドロック】
について説明します」
『でっどろっく？』
「英語で deadlock 、どうしようもない完全に固まった状態のことを表しま
す」
『なんか難しそう』
「ううん、全然難しくないよ。たとえば……」

・お店Ａ
・お店Ｂ

「があるとします」
『いきなりお店？』
「例だから……このお店には、それぞれ次のようなルールがあります」

・お店Ａ：お店Ｂが安くしたらうちも安くする。
・お店Ｂ：お店Ａが安くしたらうちも安くする。

『なにこれ、いつまでたっても安くなんないじゃん』
「それがデッドロック」
『？？？』
「これをミューテックスに置き換えてみます」

・プロセスＡ
・プロセスＢ

「がある場合に、次のようなプログラムが書かれていたとします」

・プロセスＡ：プロセスＢのミューテックスＢが解放されたら
　　　　　　　ミューテックスＡを解放する。
・プロセスＢ：プロセスＡのミューテックスＡが解放されたら
　　　　　　　ミューテックスＢを解放する。

『？？？』
「図にするとこう」

プロセスＡ                            プロセスＢ
ミューテックスＡの作成及び所有。
                                      ミューテックスＡを取得。
                                      ミューテックスＢの作成及び所有。
ミューテックスＢを取得。
ミューテックスＡを所有中←←←←←←←ミューテックスＡを監視開始。
ミューテックスＡを所有中              （監視中）
ミューテックスＢを監視開始→→→→→→ミューテックスＢを所有中
（監視中）                            （監視中）
（監視中）                            （監視中）
...

『げ、両方とも監視中になっちゃった！』
「つまり、ＡとＢ両方がミューテックスを持っていて、両方ともシグナルオ
フの時にお互いに監視を始めちゃうと、ずーっと見張りっ放しになっちゃう
んです」
『それまずいじゃん！』
「だからまずいんだって。こういう状態が【デッドロック】』
『まさにどうしようもないね……』
「これを実際にプログラムで試してみます。まず、前回作った ProcessA と
ProcessB のサンプルを用意してください」
『はい』
「それを、こう修正してください」

【ProcessA】
namespace B1
{

HANDLE g_hMutexA = NULL;
HANDLE g_hMutexB = NULL;
const char *const MUTEX_NAME_A = "ProcessesMutexA";
const char *const MUTEX_NAME_B = "ProcessesMutexB";

void CreateA()
{
    g_hMutexA = CreateMutex( NULL, TRUE, MUTEX_NAME_A );
    TRACE( "%x\n", g_hMutexA );
}

void OpenB()
{
    g_hMutexB = OpenMutex( MUTEX_ALL_ACCESS, FALSE, MUTEX_NAME_B );
    TRACE( "%x\n", g_hMutexB );
}

void WaitB()
{
    TRACE( "待機開始。\n" );
    DWORD dwResult = WaitForSingleObject( g_hMutexB, 120000 );

    if( dwResult == WAIT_TIMEOUT )
    {
        TRACE( "タイムアウト。\n" );
    }
    else
    {
        TRACE( "待機終了。\n" );
    }
}

void ReleaseB()
{
    ReleaseMutex( g_hMutexB );
}

void CloseA()
{
    CloseHandle( g_hMutexA );
}

}


【ProcessB】
namespace B1
{

HANDLE g_hMutexA = NULL;
HANDLE g_hMutexB = NULL;
const char *const MUTEX_NAME_A = "ProcessesMutexA";
const char *const MUTEX_NAME_B = "ProcessesMutexB";

void CreateB()
{
    g_hMutexB = CreateMutex( NULL, TRUE, MUTEX_NAME_B );
    TRACE( "%x\n", g_hMutexB );
}

void OpenA()
{
    g_hMutexA = OpenMutex( MUTEX_ALL_ACCESS, FALSE, MUTEX_NAME_A );
    TRACE( "%x\n", g_hMutexA );
}

void WaitA()
{
    TRACE( "待機開始。\n" );
    DWORD dwResult = WaitForSingleObject( g_hMutexA, 120000 );

    if( dwResult == WAIT_TIMEOUT )
    {
        TRACE( "タイムアウト。\n" );
    }
    else
    {
        TRACE( "待機終了。\n" );
    }
}

void ReleaseA()
{
    ReleaseMutex( g_hMutexA );
}

void CloseB()
{
    CloseHandle( g_hMutexB );
}

}

『長！』
「前回と同じように、各関数をボタンのハンドラから呼ぶようにしてくださ
い」
『なんか違いが微妙すぎていまいちわかんないんだけど』
「簡単に言えば

　　　　 | 作成            | 待機
ProcessA | ProcessesMutexA | ProcessesMutexB
ProcessB | ProcessesMutexB | ProcessesMutexA

「という感じに、相手が作ったミューテックスを待機の相手にする、ってい
う形になります」
『そか、そうすればさっきのデッドロックになる！』
「というわけで試してみましょう。まず ProcessA::CreateA() を呼んで 
ProcessesMutexA を作成」
『ほい』
「次に ProcessB::CreateB() を呼んで ProcessesMutexB を作成」
『ほい』
「次に ProcessB::OpenA() を呼んで ProcessesMutexA のハンドルを取得、
さらに ProcessB::WaitA() を呼んで待機開始」
『でも ProcessA に所有権があるから待ちっぱなし、ね』
「で、この状態の時に ProcessA::OpenB() を呼んで ProcessesMutexB の
ハンドルを取得、そして ProcessA::WaitB() を呼ぶと」
『 ProcessB に所有権があるままだから……お、固まった』
「というわけでデッドロックの完成。 ProcessA ProcessB 両方とも固まっ
たままになります」
『あちゃー……』
「ちなみにこのプログラムはタイムアウト時間を２分に設定してあるから」
『 WaitForSingleObject() の第２引数ね。お、２分待ったら復活した』
「というわけで、デッドロックは気を付けないと簡単に発生します」
『回避方法ってどうすればいいの？』
「それについてはあとでちゃんと説明するけど、とりあえず一番簡単な方法
は〈同期オブジェクトはひとつしか作らない〉ことかな」
『そっか、そうすればお互いにお見合いすることないもんね』
「ほとんどの場合ひとつで十分だし、複数必要でもセマフォを使えばなんと
かなることも多いから」
『セマフォ？』
「というわけで次回に続く！」

/*
    Preview Next Story!
*/
『せまふぉ、ってなんか言いにくい』
「慣れが必要な単語のひとつかも」
『みゅーてっくすもそうだし』
「でも使えるようになるととたんに気に入るから」
『確かに……セマフォ、セマフォ、セマフォ、かっこいいかも？』
「というわけで次回」
＜ Version 14.08 セマフォを使ってみる！ ＞
『につづく！』
「ちなみにセマフォは【信号機】って意味」
『うわかっこわる！』


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

