カテゴリー機能は終了いたしました。まとめ作成時にはタグをご活用ください。

Boost.Context with Thread Migration in GCC

Boost.Context の jump_fcontext 前後でスレッドがすり替わっていたとしても安全に挙動するように GCC の最適化を制限したい話.
プログラミング cpp Boost GCC
4
Akso de la Malbono @Cryolite
@kikairoya 牛さん牛さん! Boost.Context についてお聞きしたいことがあるのですが!
Akso de la Malbono @Cryolite
@kikairoya @Flast_RO GCC の最適化に関する話が混じるので牛も強制参加で.
にゃははー仙人 @Flast_RO
私はソース読んでわかること以上のことはやっとラン
Akso de la Malbono @Cryolite
@kikairoya @Flast_RO http://t.co/XFrGlaaa このコードを GCC の `-O2' 以上でコンパイルするとやばくなる問題を `-fno-gcse' 以外で解決する方法を教えろくださいやがりまし.
Akso de la Malbono @Cryolite
@kikairoya jump_fcontext の前後の thread_local variable の load が merge されて違う thread で resume すると別の thread の thread_local が見えちゃう系.
対鉱物用武装 @kikairoya
@Cryolite 一つのコンテキストを実行中にスレッドが切り替わること自体が未規定なんじゃないの?
対鉱物用武装 @kikairoya
@Cryolite たぶんそれを期待通りに動かそうと思うと、TLS のロードを全て volatile 扱いにしないといけない
Akso de la Malbono @Cryolite
@kikairoya そこをなんとか~. errno みたく,自分の責任の範疇の外にあるものに対してはそれ不可能なので~.
対鉱物用武装 @kikairoya
@Cryolite だから GCC がそういう扱いをしないと無理、という話。あと規格上想定されてない状況ですよねこれ
Akso de la Malbono @Cryolite
@kikairoya 規格の外にある話なのはもちろん重々承知なのですぐぁー.ぐえーぐえーぐえー.
Akso de la Malbono @Cryolite
@kikairoya C++ の? C++ の TLS の文言読んでもあんま役に立たないような……. [basic.stc.thread] 3.7.2
Akso de la Malbono @Cryolite
っていうかこれを解決しないととBoost.Coroutineが複数スレッドにまたがってmigrateできないわけで,Boost.Coroutineが単一スレッド上で弾幕ばらまいたり列挙したりできるだけのマジしょーもねーライブラリに成り下がって世界が再び闇に閉ざされる.
対鉱物用武装 @kikairoya
@Cryolite -fno-gcse あり・なしのアセンブリ見せて
対鉱物用武装 @kikairoya
x86_64 で fs:0 って何を示すんだ
対鉱物用武装 @kikairoya
@Cryolite TLS のロードって tree とか gimple の時点ではどうなってるん
対鉱物用武装 @kikairoya
はー自分でコード読むのめんどくせえ
残りを読む(112)

コメント

やまさ🌶 @yamasa 2013年2月11日
私なりの考察を追加してみた。
ログインして広告を非表示にする
ログインして広告を非表示にする