五回目。全八回として折り返しにあたる回で、ゲストを一人見送って、また二人に戻ってきた。前回のレビューで「今度は二人が同じ台所に立つそうなので、声の書き分けが、いよいよ本番になる」と書いた、その本番である。良い点から。
まず、シリーズ前半の積み上げが、ちゃんと財産になっている。レースコンディションの節で、麦茶の札を「第1回で共有メモリと呼んだものです」と冷蔵庫のホワイトボードに繋ぎ、「手伝う」の非対称では指示を渡すコストを「第1回でコンテキスト」、段取りを持つ側を「前回でいうスケジューラ役」と呼び戻す。過去回の概念が、飾りの再放送ではなく今回の論を進めるために再利用されている——自己引用が節約的だ。四回ぶんの蓄積を持つシリーズが陥りがちな「前回も言いましたが」の水増しが、ここには無い。第二に、CS概念の現場翻訳が、今回も比喩で歪んでいない。とくにシェアードナッシングを「部屋という単位で完全に切り分けてあるから揉めない」清掃の十五室に当てた箇所は、共有しない=調整がいらない、という性質を一切足し引きせずに運んでいる。ロックの粒度を「風呂はまるごと一個(粗い)/洗面所は鏡の前と洗濯機の前で別(細かい)」に分けた読み替えも、粗いと安全だが並行度が低い・細かいと並行度は上がるが管理が増えデッドロックも起きやすい、というトレードオフを正確に保っている。第三に、締めが、シリーズの型どおりに効いている。「うちはね、二十二年やってきて、夫と台所に同時に立ったこと、ほとんど無いんですよ」——並行処理の理想(対等な働き手が複数)を、当の現場の人が「うちは並行しない方を選んだ」と裏返して閉じる。#1「溜まるものは溜まる」、#4「家の七時は守れない」と同じ、知識・理想と、現実の選択の落差で閉じる系列だ。
これまでの指摘の経過観察。固有の数(◎。まな板一枚・コンロの手前は一つ・シンク一つ・十五室・三人・台車一台・二十二年と、今回も具体物で数えている)と締めの重心(◎)は維持。前回ほぼ卒業とした「まさに○○です」型の裏書きは、今回「まさにそれがデッドロックです」「それ、フラグそのものです」が残る(後述4・5の中で触れる)。処方的・説教的な語尾は、書き手も自覚していて「説教くさく聞こえたら、聞き流してください」と一度ことわっているのは上手い予防線——ただしそのぶん、ことわった後の「資源を取る順番を、二人で揃える」がやや教科書的に直立している(後述2)。比喩の固定(同じ比喩を一回で擦りすぎる癖)は、「まな板/コンロ」のペアがセクション2・3・7で繰り返し主役になり、やや一本足になりかけ(後述3)。前回宿題のクライマックスの一本化は、今回セクション6(手伝うの非対称)と7(締め)に山が二つ立っており、再発の気配がある(後述6)。マキノの問い返し(受け身に痩せていないか)は健在で、「どうすればいいんですか、これ」「じゃあ、二人は無駄なんですか」と要所で論を前へ蹴り出している(◎)。そして折り返し回・夫婦回ならではの観点を二つ。誰の家の話なのか(夫婦・家族の描写が一般化しすぎていないか・後述5)、CS概念の正確さ(デッドロックの四条件・レースコンディション・そして登場しなかったロックフリーまわり・後述1と4と7)。以下、第一稿からそのまま引いて挙げる。
「永遠に動きません。これをデッドロックといいます。二人とも、相手が持っているものを待っていて、しかも自分が持っているものを手放さない。両方が固まる。」
デッドロックの現象は完璧に描けている。「相手が持っているものを待つ+自分のは手放さない」は、デッドロック四条件のうち保持して待つ(hold and wait)と横取り不可(no preemption)を、専門語を使わずに体で見せている。問題は、この後の処方「資源を取る順番を、二人で揃える」がなぜ効くのか、その理屈が宙に浮く点だ。順番を揃えると効くのは、四条件の最後の一つ——循環待ち(A はまな板を持ってコンロ待ち/B はコンロを持ってまな板待ち、という輪っか)——を断ち切るからで、本文の「順番が揃っていると、待ちは起きても、待ち合いは起きない」は実はこの「輪を作らせない」をかなり正確に言い当てている。あと半歩で四条件の核心に触れているのに、その半歩を踏んでいないのが惜しい。処方は重くしない。シマダに一文、「二人が逆向きの順番で取ると、待ちが輪になる。輪さえできなければ、固まらない」と、輪(循環)という像を一語だけ足す。四条件を全部列挙しろという話ではない——むしろ列挙は野暮だ。だが「順番を揃える=輪を断つ」が見えると、処方が「なぜか効くおまじない」から「構造的に効く一手」に変わる。
「あ、それは順番を揃えるより、もっと強い手です。そもそも二人で同時に握らない。一人が全資源を抱えてしまえば、待ち合いようがない。それも一つの正解で——ただ、並行度はゼロになります。」
ここはむしろ良い箇所で、安全(デッドロックを絶対に起こさない)と速さ(並行度)のトレードオフを、二つの手を並べて見せている。「並行度はゼロになります。二人いるのに、一人ぶんしか進まない」は的確だ。気になるのは語り口の方。「もっと強い手です」「それも一つの正解で」と、シマダが二手の優劣を自分で裁定してから渡している。先生がテストの模範解答を配る間合いに近く、せっかく「説教くさかったら聞き流して」と予防線を張った直後だけに、もったいない。処方は、優劣の裁定をマキノの現場に拾わせること。マキノはすでにセクション6・7で「一人がやって、もう一人は別の部屋」という全部握る側の実践者として立っている。であれば、ここでシマダが「強い手です」と言い切るより、マキノに「じゃあ、うちが台所を分けてるのは、その『全部握る』の方なんですね」と自分で名指しさせる方が、裁定が現場から立ち上がる。シマダは「——そうです、ただし並行度はゼロ」と受けるだけでいい。処方を司会が配るのではなく、現場が掴む。前回レビューで歓迎した「マキノが概念を先に言い当て、シマダが追認する逆流」が、ここでも使える。
「まな板は一枚。コンロの手前の口は一つ(奥は使いにくい)。シンクは一つ。ボウルの大きいのは一個。」(2)
「まな板とコンロ、両方を使う料理を、二人がそれぞれ作っている。」(3)
「どれが共有資源か(まな板は一枚、コンロの手前は一つ)の地図があって」(7)
セクション2で共有資源の例を四つ(まな板・コンロ・シンク・ボウル)きれいに数え上げたのに、その後の論——デッドロック(3)も、締めの地図(7)も——ほぼ「まな板とコンロ」の二点に収束してしまう。シンクとボウルが、最初に名前を呼ばれたきり働かない。これは比喩の固定癖(一つの像を一回で擦りすぎる)の変奏だ。とくにデッドロックは「二つ以上の資源を二人が逆順で取る」話なので、毎回まな板とコンロだと、読者の頭の中で共有資源=まな板とコンロの二個だけに縮む。処方は、最初に数えた四つを後の論で別々に働かせること。たとえばデッドロックの例を「一人がシンクで野菜を洗いながらまな板待ち/もう一人がまな板で切りながらシンク待ち」にすれば——実はセクション3後半のマキノ自身の台詞(「私がシンクで野菜洗ってて、向こうがコンロで」)がすでにシンクを使っている。シマダの導入例(まな板+コンロ)とマキノの実例(シンク+コンロ)が食い違ったまま並走しているので、導入例の方をマキノの実例に寄せて統一すれば、無理なく資源が散る。せっかく四つ数えたのだから、四つに働いてもらいたい。
「確認した時点では正しかった判断が、行動するころには古くなっている。」
「一つは、『いま作りかけです』という札を立てる。フラグといいます。」
「それ、フラグそのものです。札という一枚を、私とフロントの両方が見にいく。」
レースコンディションの核——「確認」と「行動」の間にすきまがあり、そのすきまに相手が割り込む——の言語化は、この回でいちばん見事だ。time-of-check to time-of-use のずれを、専門語ゼロでここまで正確に出した家事比喩は他に知らない。麦茶が二本/一本もできない、の両方を出したのも誠実だ(競合は「重複」と「取りこぼし」の両方向に転ぶ)。一点、概念の整理で気になるのが「ロック」(セクション2)と「フラグ」(セクション5)の関係。セクション2で「いま私が使っている札を一枚立てる」のをロックと呼び、セクション5で「いま作りかけですの札を立てる」のをフラグと呼ぶ。読者から見るとどちらも「札を立てる」で、同じことを二つの名前で呼んでいるように見えかねない。実際この二つは近縁で、フラグは素朴なロックの実装でもある。だが回の中では別概念として導入されているので、シマダに半文、両者の違い——ロックは「使い終わるまで他人を完全に締め出す」関所、フラグは「いま誰かが動いてる、と知らせるだけの掲示」で、締め出す力はロックの方が強い——を一言で区別させたい。麦茶の札(フラグ)は、相手が無視して作ることもできる(だからダブつきは完全には防げない)。まな板のロックは、握っている間は物理的に相手が握れない。この強制力の差に半文触れるだけで、二つの「札」が別物として立つ。
「『先にやってよ』『いま先に使ってるでしょ』って、あれ。夫婦でやりますよ。」(3・マキノ)
「冷蔵庫の麦茶が、もう少ししかない。これを二人が、別々のタイミングで見る。あなたが見て」(5・シマダ)
「『順番!』と子どもが言うのは」(4・シマダ)/「鏡の前で歯みがいてる子と、その横で〜靴下選んでる子は」(4・マキノ)
家庭の摩擦を扱う回として、ここは一番丁寧に見たい。マキノ家の具体(夫と二人、二十二年、子どもが二人いるらしい洗面所)と、名前のない「一般の家」(麦茶を見る「あなた」と「相手」、トイレットペーパーの「二人」)が、同じ本文の中で混在している。とくにセクション5のシマダの「あなたが見て『あ、ないな』」の「あなた」は、読者を指すのか、台所の不特定の二人を指すのか、宙に浮く。一方マキノの台詞は終始「うち」「向こう」「私」で、誰の家かが明確だ。この温度差で、せっかくマキノ家という具体的な一軒が立ち上がっているのに、シマダの例だけ教科書の「家庭一般」に薄まる。処方は二つ。(a) シマダの「あなたが見て」を、マキノ家の話としてマキノに引き取らせる——「うちでも麦茶、二本できますよ」と。実際セクション5でマキノは直後にトイレットペーパーの実例(「ありますよ、それ」)を出しているので、麦茶の例ごとマキノに渡しても流れは壊れない。(b) あるいはシマダの「あなた」を「片方」に均し、不特定であることを統一する。(a) を推す——この回の財産は「マキノ家という一軒の二十二年」が締めで効くことなので、途中の例もその一軒に集めた方が、締めの『うちは同時に立たない』が重くなる。なお、子どもが二人いるらしい描写(洗面所・「順番!」)は良い具体だが、ここも「子ども」と一般化されていて、マキノ家の子なのか例示の子なのかが曖昧。家族構成は、出すなら一度マキノの口で輪郭を決めておきたい(清掃二十二年と同じく、人物の蓄積になる)。
「指示を渡すコストが、その人が動いて生む利得を、上回ってしまう。だから『一人でやったほうが早い』が、本当に成立する。サボってるんじゃなくて、構造として、そうなる。」(6)
「夫と台所に同時に立ったこと、ほとんど無いんですよ。仲が悪いんじゃないんです。(中略)資源が、一人分しかないからなんです。」(7)
#3・#4から続く「山が二つ」の宿題が、今回も顔を出している。セクション6の「『一人でやったほうが早い』は、構造として成立する/サボってるんじゃない」は、家事の罪悪感を構造の問題に変換する、思想的にいちばん強い一撃だ。これは素晴らしい——並行処理の利得が指示コストで目減りする(アムダール的な頭打ち)を、家事の感情に着地させている。ところがこれが強く立つせいで、締め(7)の「同時に立ったことが無い/仲が悪いんじゃない/資源が一人分しかない」と、ほぼ同じ主張が二度鳴る。6で「一人でやった方が早いは構造だ」と言い、7で「だから二人で立たない」と言う——論理は連続しているが、感情のピークが二回来る。読者は6でいちど「サボりじゃない、構造だ」と救われてしまうので、7の「二十二年、同時に立っていない」の重みが、二度目の波として薄まりかねない。前回までと同じ処方を出す。(a) セクション6の「サボってるんじゃなくて、構造として、そうなる」を断定で立て切らず、マキノの実感(玉ねぎの例)で受けて素通りさせ、思想の山は7に集約する。(b) あるいは6を本気で立てるなら、7は「資源が一人分」の説明をせず、「同じ部屋に二人で立つことが、仲のしるしだとは、私はもう思ってない」の一行だけで静かに引く。(b) を推す——7の後半は説明がやや多く(「資源が一人分」「待つくらいなら」「家ぜんぶで見たら進んでる」と理屈が三つ重なる)、6でもう構造は説明し終えているので、締めは理屈を捨てて選択の述懐だけにした方が、落差が立つ。実際、最後の二文「仲のしるしだとは思ってない/別々の部屋で手が動いてる時間の方が長い」は理屈抜きで効いている。その手前の説明を削るだけでいい。
「シェアードナッシング。何も共有しない。各自が自分のぶんの資源を丸ごと抱えて、他人のものに触らない。触らないから、調整がいらない。」(1)
「シェアードナッシングに寄せると、指示そのものが消えるんです。」(6)
これは欠点というより、取りこぼしている鉱脈の指摘だ。この回の隠れた背骨は「ロック(調整)はコストである」という一点で、シェアードナッシング(1・6)も、デッドロック回避の『一人が全部握る』(3)も、すべて「いかにロックを取らずに済ませるか」に向かっている。CSではまさにこの方向にロックフリーという名前がついていて——ロックという関所を一切立てずに、設計(資源を分ける・触らない)で衝突そのものを起こさせない——この回の主張と完全に同じ思想だ。今の稿はその思想を二回実演しているのに、束ねる一語を与えていない。処方は、無理に専門語を増やすことではない(「ロックフリー」を出すかは書き手の判断でいい)。むしろ締め(7)の「地図と、約束と、分担」を整理するときに、シマダに一言、「いちばん強いのは、ロックを上手に取ることじゃなくて、そもそもロックが要らないように分けてしまうこと」と、回全体を貫く背骨を一度名指しさせたい。そうすると、シェアードナッシング(1)→順番を揃える(3)→粒度(4)→フラグ(5)→領域ごと渡す(6)が、「ロックを取る/取らずに済ます」の一本の軸に並ぶ。今は良い部品が七つ並んでいるが、それを貫く串が、読者の手に最後まで渡らない。串を一本通すと、折り返し回にふさわしいシリーズの中間総括にもなる。
折り返しの回として、前半四回の概念(共有メモリ・コンテキスト・スケジューラ役)を節約的に呼び戻し、CS概念は比喩で歪まず(シェアードナッシングの十五室、ロック粒度の風呂と洗面所、レースコンディションの確認と行動のすきま)、締めはシリーズの型どおり理想と選択の落差で閉じた。とくに「確認と行動のすきまに相手が割り込む」のレースコンディションの言語化と、「一人でやった方が早いは、サボりではなく構造」は、この回の財産だ。マキノの問い返しも健在で、論を受け身にしていない。
概念の精度で締めたいのは三点。デッドロックは現象が正確なぶん、処方『順番を揃える』が効く理由=循環待ち(輪)を断つ、に半歩踏み込む(1)。「ロック」と「フラグ」が同じ『札』に見えるので、締め出す力の差を半文で区別する(4)。そしてシェアードナッシング/『一人が全部握る』が向かう『ロックを取らずに済ます』という背骨に、締めで一度串を通す(7・ロックフリー的な中間総括)。
構成と声では、前回からの宿題クライマックスの一本化が再発しかけ——6の「構造だ」と7の「同時に立たない」で山が二つ(6)。締めの理屈を削れば落差が立つ。比喩はまな板/コンロに偏っているので、最初に数えたシンク・ボウルも後の論で働かせる(3)。処方の裁定は司会が配らず現場に掴ませる(2)。
そして折り返し・夫婦回ならではの一番の提案。誰の家の話なのかを、マキノ家の一軒に寄せる(5)。麦茶の「あなた」が宙に浮き、家族構成が一般化している今、例をマキノ家に集めれば、締めの「二十二年、同時に立たない一軒」が重くなる。家庭の摩擦を扱う回でいちばん怖いのは、摩擦が「どの家でも起きる一般論」に薄まることだ。一般論は誰も傷つけないが、誰の胸にも刺さらない。意味は具体物が運ぶ——まな板一枚と台車一台と二十二年が、五回目もそれを証明している。第6回「ガベージコレクション」を楽しみにしている。捨てられない物の回は、いよいよ一軒の家の、その家にしかない事情が問われる回になるはずだ。