[解決済み] C++11のthread_local変数は自動的にstaticになりますか?
2023-01-26 19:36:39
質問
この2つのコードセグメントに違いはありますか?
void f() {
thread_local vector<int> V;
V.clear();
... // use V as a temporary variable
}
と
void f() {
static thread_local vector<int> V;
V.clear();
... // use V as a temporary variable
}
背景:もともと私は静的ベクトルV(中間値を保持するためのもので、関数に入るたびにクリアされる)とシングルスレッド・プログラムを持っていました。このプログラムをマルチスレッドにしたいので、どうにかしてこのstatic修飾子を取り除かなければなりません。私の考えは、すべてのstaticをthread_localに変えて、他のことは気にしないようにすることですか?このアプローチは裏目に出ることがありますか?
どのように解決するのですか?
C++標準によると
thread_local がブロックスコープの変数に適用された場合、その変数には ストレージクラス指定子 static が暗示されます。 と表示されない場合は 明示的に
ということは、この定義が
void f() {
thread_local vector<int> V;
V.clear();
... // use V as a temporary variable
}
は
void f() {
static thread_local vector<int> V;
V.clear();
... // use V as a temporary variable
}
ただし、静的変数が ではなく thread_local 変数と同じです。
1 thread_local キーワードで宣言されたすべての変数は、スレッド記憶期間を持ちます。 ストレージの持続時間を持つ。これらの実体のためのストレージは、それらが作成されたスレッドの持続時間の間 これらの実体のためのストレージは、それらが作成されたスレッドの期間続くものとする。スレッドごとに個別の オブジェクトまたは参照はスレッドごとに存在し、宣言された名前の使用は、現在のスレッドに関連する実体を参照する。 現在のスレッドに関連付けられた実体を指す。
これらの変数を区別するために、この規格は新しい用語を導入しています。 スレッド保存期間 を静的な保存期間と一緒に使用します。
関連
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] C++のPOD型とは何ですか?
-
[解決済み] switch文の中で変数を宣言してはいけないのはなぜですか?
-
[解決済み] C++のファンクターとその使い方とは?
-
[解決済み] const std::string & をパラメータとして渡す時代は終わったのでしょうか?
-
[解決済み] C++11のthread_localの意味は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】構造体のベクター初期化について
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】C++11でローカル静的変数の初期化はスレッドセーフか?重複