追記:syntax sugarでやっつけてしまう方法

やっぱ分けて書くのは面倒、というか、i/fの整合性を取るのが面倒だ、という考えに傾き勝ちな俺は、プログラミング言語の文法で解決しちゃえという気持ちになる。
staticとかstrictとかでプロセス(スレッド)を定義して、その中は参照透明性を保障する、というような感じだ。
つきつめていくと、何だってC++で書けちゃうって話になりそうなので、ここらでやめとこう(笑