400
Post/Edit Page
とあるソースコードを見る。深いところだ。解析の結果、排他制御に問題がありそうな気配がしたので潜った。案の定、至る所にロックがかかっている。しかも、よく見るとロックなど必要のないところ――たとえば絶対に書き換えられることのない値のGetter全体にかけられたクリティカルセクション――もある。どうも様子がおかしい。▼いろいろ探ったところ、真実が浮かび上がってきた。このクラスは当初、かなり緻密なマルチスレッド対応がなされていたらしい。最小限の粒度で排他できるよう、Read/Writeも正しく意識した細やかな制御が随所に埋め込んである。だが、恐らくはそのあとで引き継いだ者が、何か並列化による不具合でもあったのだろう、外部から呼ばれうるほぼ全ての関数を、単一のクリティカルセクションで括り直したのだ。先人の知恵と努力は、鍵の中へ無慈悲に封印されたのだった。▼どんなに優れた思想も設計も、後で台無しにするのは簡単である。
pass:
Draft