Boost.Context with Thread Migration in GCC

Boost.Context の jump_fcontext 前後でスレッドがすり替わっていたとしても安全に挙動するように GCC の最適化を制限したい話.
4
Akso de la Malbono @Cryolite

@kikairoya 牛さん牛さん! Boost.Context についてお聞きしたいことがあるのですが!

2013-01-10 20:31:28
Akso de la Malbono @Cryolite

@kikairoya @Flast_RO GCC の最適化に関する話が混じるので牛も強制参加で.

2013-01-10 20:41:31
にゃははー仙人 @Flast_RO

私はソース読んでわかること以上のことはやっとラン

2013-01-10 20:48:55
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 一つのコンテキストを実行中にスレッドが切り替わること自体が未規定なんじゃないの?

2013-01-10 21:08:00
若年寄(もう若くない) @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 規格の外にある話なのはもちろん重々承知なのですぐぁー.ぐえーぐえーぐえー.

2013-01-10 21:13:53
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
若年寄(もう若くない) @kikairoya

@Cryolite -fno-gcse あり・なしのアセンブリ見せて

2013-01-10 21:22:32
若年寄(もう若くない) @kikairoya

@Cryolite TLS のロードって tree とか gimple の時点ではどうなってるん

2013-01-10 21:52:52
若年寄(もう若くない) @kikairoya

はー自分でコード読むのめんどくせえ

2013-01-10 21:57:26
1 ・・ 6 次へ