にゃははー

はへらー

Boost.Contextのこととか話した

Boost.勉強会 #9 つくば - boostjp
Boost9 session

並行と並列とスレッド

前半はなんか概念的なことばっかり話したと思う。しかも後半でほとんど関係なくなったし。
とりあえずユーザースレッドってものを導入したかったのだと思う。多分。

カーネルスレッドとユーザースレッドを別物みたいに語ってるけど本質は同じなわけで、特権命令か一般命令かとかそういう話をしっかりできたほうが良かったのだろうか。
けどそうするとリングプロテクションがとかなって時間が爆発してしまうことになる...

Boost.Context

一点補足するの忘れてた。boost::ctx::stack_allocatorを普通に使って初期化してましたけど、stack_allocator::allocateはスタックのtopのアドレスを返すので注意です。
つまり普通のアロケータと違って確保した領域の末尾のアドレスを返します。なので帰ってきたアドレスをそのまま使おうとすると悲しくなります。
あと他のアロケータがほとんどdeallocateの第2引数を捨ててるからといってstack_allocator::deallocateの第2引数を適当に渡すと、確保領域の先頭アドレスを計算できなくて死ぬので正しい値を渡すようにしてください。

あとスライド中の幾つかの例は簡単のため型が正しくないです。
ctx::make_fcontextに渡せるコンテキストのエントリーポイントは全て void(intptr_t) となる関数へのポインタのみとなりますし、ctx::jump_fcontextの第3引数に投げられる値もintptr_tです。ctx::jump_fcontextが返す型もintptr_tです。
なのでキャストとか結構しないとうまくいかないです。

一方、Boost.Coroutineはシグネチャさえ合えば任意のfunctorを投げられます。特別な理由がない限りBoost.Coroutineを使うのが正しいと思います。
exitは呼ばれないですし例外は拾ってくれるしdtorは呼ばれますし。

C++標準委員会のくだり

紹介したpaperは基本的に”並行並列実行”自体を扱うものでした。実際は、concurrent queueとかも既に提案されてるのでやはり並行並列の関心は高いようです。

まとめ

就職先を考えねばならない