例外安全とか幻想

随分昔のつぶやきですが、この最後のフレーズがお気に入りなので、周りのコンテキストも含めてまとめました。
12
NyaRuRu @NyaRuRu

InitializeCriticalSection APIの悪名高い超仕様,「空きメモリが超少ないとSTATUS_NO_MEMORY例外出しちゃうよ」はVistaで根絶に成功してたんだな.偉い. http://bit.ly/dv3Wzl

2010-07-24 22:26:15
野良猫@がんばらない @mskwt

@NyaRuRu Win32 が例外を投げないと信じさせている流れが問題なんじゃないかねえ…。SEH 要求するなとも言えるが

2010-07-24 22:28:33
NyaRuRu @NyaRuRu

@mskwt InitializeCriticalSectionAndSpinCountさんがもっとキャラが立っていれば! 主役のInitializeCriticalSectionさんを押しのけて単独アニメ化されるぐらいキャラが立っていれば!

2010-07-24 22:31:14
_ko1 @_ko1

@NyaRuRu メモリ無いとどうなるの?

2010-07-24 22:28:27
NyaRuRu @NyaRuRu

@_ko1 ありがちな思考実験として,何かの致命的な状態が発生 → ロールバック処理開始 → その処理にCritical Sectionが必要 → Critical Sectionの作成に失敗 → \(^o^)/オワタ,を回避するためのAPI設計論みたいなのがある気がします.

2010-07-24 22:35:27
NyaRuRu @NyaRuRu

@_ko1 今回の件だと,sizeof(CRITICAL_SECTION)な領域を確保で来てれば基本大丈夫な実装になったんじゃないですかねぇ.

2010-07-24 22:41:02
NyaRuRu @NyaRuRu

@_ko1 @mskwt CriticalSectionでのメモリ足りない時どうするか問題ですが,Windows Internals 5th Edition Chapter 3 "Keyed Events" に詳細が書いてありました.

2010-07-25 23:54:39
NyaRuRu @NyaRuRu

「超大変,失敗するとロールバックがさらに生地獄,むしろ殺して,な処理を開始するまえにその処理に必要なリソースを確保/予約する」→ 「必要量の事前予約/確保に失敗したらそんなやばい仕事は始める前に笑顔で失敗したことにする」という戦略もあることを私はCLRから学んだわけですが,

2010-07-24 23:40:47
NyaRuRu @NyaRuRu

(続き)それ以来,RAIIバンザイ/リソース確保時間は最小限に,なC++コードを見る目が変わりました.処理と並行してちまちまリソースを確保していくので,これ超大変な処理中とかそのロールバック中にリソース確保に失敗すると簡単に詰む的な.んで,そんな心境の変化もある一方で,(続く)

2010-07-24 23:42:39
NyaRuRu @NyaRuRu

Windowsのプロセスとかもうほんとミステリ作家が量産するように,ありとあらゆる残虐な方法で無意味に無価値に理由もなく日々惨殺されるので,1回や2回ぐらいプロセスが死んでも3秒後には元気に走り回る姿が見られるような不死鳥(でも死なないわけではない)設計の方がよほど汎用的デスと

2010-07-24 23:45:42
NyaRuRu @NyaRuRu

この世界では例外安全とか非同期例外対策とかふざけた幻想ですよ.そんなことでリセットボタンを押す猫に勝てるのかと一度真剣に考えてみるべきですよ.

2010-07-24 23:47:27
NyaRuRu @NyaRuRu

「いいか,作戦はこうだ」 1. 猫をロックする 2. きわめて重要な処理を行う 3. 猫のロックを解除する.

2010-07-25 00:39:36