Boost.Context with Thread Migration in GCC
Boost.Context の jump_fcontext 前後でスレッドがすり替わっていたとしても安全に挙動するように GCC の最適化を制限したい話.
Akso de la Malbono
@Cryolite
@kikairoya 牛さん牛さん! Boost.Context についてお聞きしたいことがあるのですが!
2013-01-10 20:31:28
Akso de la Malbono
@Cryolite
@kikairoya @Flast_RO http://t.co/XFrGlaaa このコードを GCC の `-O2' 以上でコンパイルするとやばくなる問題を `-fno-gcse' 以外で解決する方法を教えろくださいやがりまし.
2013-01-10 20:52:01
Akso de la Malbono
@Cryolite
@kikairoya jump_fcontext の前後の thread_local variable の load が merge されて違う thread で resume すると別の thread の thread_local が見えちゃう系.
2013-01-10 21:06:14
若年寄(もう若くない)
@kikairoya
@Cryolite たぶんそれを期待通りに動かそうと思うと、TLS のロードを全て volatile 扱いにしないといけない
2013-01-10 21:09:25
Akso de la Malbono
@Cryolite
@kikairoya そこをなんとか~. errno みたく,自分の責任の範疇の外にあるものに対してはそれ不可能なので~.
2013-01-10 21:10:56
若年寄(もう若くない)
@kikairoya
@Cryolite だから GCC がそういう扱いをしないと無理、という話。あと規格上想定されてない状況ですよねこれ
2013-01-10 21:12:27
Akso de la Malbono
@Cryolite
@kikairoya C++ の? C++ の TLS の文言読んでもあんま役に立たないような……. [basic.stc.thread] 3.7.2
2013-01-10 21:17:32
Akso de la Malbono
@Cryolite
っていうかこれを解決しないととBoost.Coroutineが複数スレッドにまたがってmigrateできないわけで,Boost.Coroutineが単一スレッド上で弾幕ばらまいたり列挙したりできるだけのマジしょーもねーライブラリに成り下がって世界が再び闇に閉ざされる.
2013-01-10 21:21:34