問題タブ [data-race]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 変数の非同期読み取り/書き込みはデータ競合を引き起こす可能性がありますか?
Jack Shirazi によるJava Performance Tuningでは、次のように書いています。
これは、変数のアクセスと更新が自動的に同期されることを意味します (変数が long または double でない限り)。メソッドが変数へのアクセスまたは代入だけで構成されている場合、スレッド セーフのために同期化する必要はなく、パフォーマンスのためにそうしない理由もあります。スレッド セーフは、他の変数値とは関係なく、変数にアクセスしたり、変数に代入したりするステートメントのセットにさらに拡張されます。
上記の説明によると、操作 likeflag = true
は常にアトミックであり、 は必要ありませんsynchronize
。
ただし、次の状況をデータ競合と見なす別の記事があります。
そして著者は次のように述べています。
現在、フラグは揮発性ではないため、すべての実行にデータ競合があります
2 つの記事の矛盾について、私はかなり混乱しました。
multithreading - 低レベルの tcl ライブラリ関数 Tcl_NewStringObj によるデータ競合の問題
Tcl はその基本的なマルチスレッド フレームとしてアパートメント スレッド モデルを使用するため、すべての tcl インタープリター obj はそれを作成するスレッドにバインドされます。私のプログラムでは、各スレッドは、最初に Tcl コマンドを呼び出す必要があるときに、Tcl_CreateInterp を呼び出して独自のインタープリターを作成します。しかし、Q&A テストでは、valgrind (v3.13.0) は、スレッドが独自のインタープリターを作成しようとするとデータ競合の問題が発生する可能性があると報告しています。データ競合は API Tcl_NewStringObj/TEBCresume/TclNREvalObjv などで発生します。私の使用モデルで修正すべき点はありますか? それともvalgrindの偽陽性ですか?
boost::thread_specific_ptr を使用して、スレッド ローカル インタープリターを管理します。