C++で継続・コルーチン
タスク定義をどうするかが問題。なんとかcontinuation(継続)をC++でかけないものか。
必要なのは、いわゆるプログラムカウンタ(+レジスタ群)の保存と、スタック上のローカル変数データの保持。
FSMモデルならなんとかかけます。(参考:d:id:yaneurao:20040525)
保存が必要なデータはメンバ変数にすればOK。でもこれだとプログラムが恐ろしく汚くなるんだよな。
やりたいことはスタックポインタ入れ替えてsetjmpなんだけど、これのポータブルな実装を自前でやるのは絶望的すぎる。というか例外使ってるプログラムだとどうなるんだっけ?
と、書いてる途中にBinary Hacksに似たようなネタがあったのを思い出す。
ありましたありました。
- Portable Coroutine Library
- GNU Pth
- Boost::Coroutine
Boost好きとしてはBoost::coroutineかと思いきや、draftっぽいので回避。
PCLとPthを検討してみます。