2012-01-07 20 views
13

list of c++11 features supported by visual studioがあります。C++ 11 visual_studioでのthread_localキーワードのサポート11

thread_localサポートは部分的にマークされています。私はここで正確に部分的なサポートが何を意味するのかの説明を見つけることができませんでした。彼らはエイリアス__declspec(スレッド)でしたか?

私はboost :: thread_specific_ptrを使うことができますが、boost::thread_specific_ptr is slowという報告があるようです。そうかもしれないし、そうでないかもしれない。

具体的には、最新のlinux + gccとwindows + msvcで、x86/x64上で高速TLSが必要です。できるだけシステムコールがないということを意味します(これは上記のプラットフォームで可能です)。

+5

Visual C++ 11 Developer Previewは、 'thread_local'キーワードをサポートしていません。 –

+0

ここでは「部分的」という意味は、セマンティクスはサポートされていますが、標準の構文/キーワードではサポートされていないことを意味します。 – ildjarn

+1

@ybungalobill GNU、POSIX、Microsoft、SUN、IBM、およびC++標準委員会のいずれも、うまく設計されたソフトウェアで必要とされない何かのための機能を提供していないか、またはあなたの理解に欠陥があります。しかし、私はあなたの議論を聞きたい。 – Eloff

答えて

6

私はthread_localのセマンティクスを掘り下げました。 gccの__threadとmsvcの__declspec(スレッド)はお互いに同じセマンティクスを持ち、thread_local(ダイナミック初期化はまだ標準にしていないかもしれません)ですので、これは実際の使用例では問題になりません。私はちょうど別名1つまたは他のプラットフォーム固有の属性を定義します。

+9

悲しいことに、これらのメカニズムの問題は、非PODタイプをサポートしていないことです。スレッドが終了すると、そのTLSオブジェクトにデストラクタが呼び出されるようにします。 '__thread'と' __declspec(thread) 'のどちらもそれを処理できません。もしあなたがそれを必要としないなら、このアプローチはうまくいくはずです – jalf

+1

あなたは、とにかく無料で建設/破壊を行うことはありません。もっと必要なのであれば、それは言葉ではありません。 )メカニズム。私は__threadコンテキスト*を使い、スレッドの開始メソッドでスタックにコンテキストを割り当て、それを指すようにtlsコンテキスト*を設定しました。それから私は適切な建設/破壊を取得し、それへのアクセスは可能な限り速くなければなりません。 – Eloff