これもBoost.Contextのサンプルにあるものですが、Boost.Contextのコンテキストスイッチを利用して複数の関数を並行に動かしています。
#include <iostream> #include "continuation.hpp" void first(continuation& cont) { for (int i = 0; i < 5; ++i) { std::cout << "a-" << i << std::endl; cont.suspend(); } } void second(continuation& cont) { for (int i = 0; i < 5; ++i) { std::cout << "b-" << i << std::endl; cont.suspend(); } } int main() { continuation c1(first); continuation c2(second); while (!c1.is_complete() && !c2.is_complete()) { c1.resume(); c2.resume(); } }
a-0 b-0 a-1 b-1 a-2 b-2 a-3 b-3 a-4 b-4
Boost.Contextがやることは、スレッドが内部的にやっている「ちょっと処理を進めてコンテキストを切り替えて…」ということを自前でできるようにすることなので、並行プログラムの一環として使用することができます。