問題タブ [lock-free]

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.

0 投票する
1 に答える
1181 参照

multithreading - アトミック操作は、スレッド間で行うのと同じようにプロセス間で機能しますか?

明らかに、アトミック操作により、異なるスレッドが値を上書きしないことが保証されます。しかし、共有メモリを使用する場合、これはプロセス間でも当てはまりますか? プロセスがOSによって異なるコアで実行されるようにスケジュールされている場合でも? それとも、異なる異なる CPU 間ですか?

編集:また、安全でない場合は、スケジューラの観点からプロセスとスレッドが同じであるLinuxのようなオペレーティングシステムでも安全ではありませんか?

0 投票する
6 に答える
8014 参照

multithreading - ロックフリーのデータ構造が相互排除 (ミューテックス) よりもパフォーマンスが低いのはいつですか?

ロックフリーのデータ構造が「特定のワークロードに対して」より効率的であることをどこかで読みました(もうページが見つかりません)。アトミック操作を実行するためのロック命令の約 100 サイクルのヒットは、スリープしてスケジューラがプロセスを復帰させるのを待つよりもはるかに高速に聞こえるため、ロックフリーのデータ構造がどのような状況下にあるかは明らかではありません。昔ながらのミューテックスよりも好ましくないでしょう。ロックが 99% の時間利用可能で、プロセスがスリープ状態になる必要がない場合、ミューテックスの方が高速ですか? 適切なロックのないデータ構造が利用可能であると仮定して、どちらに進むべきかを知るための良い経験則はありますか?

0 投票する
4 に答える
2641 参照

c++ - スレッドセーフ、ロックフリーのインクリメント機能?

更新: C または C++ で利用可能なすべての Linux ディストリビューションで利用可能な、スレッドセーフでロックフリーのインクリメント関数はありますか?

0 投票する
3 に答える
3468 参照

multithreading - ロックフリーの標準コレクションとチュートリアルまたは記事

ロックフリーの通常のデータ型の実装 (ソースコードを意味する) のための優れたリソースを知っている人はいますか? リスト、キューなどについて考えていますか?

ロックの実装は非常に簡単に見つけることができますが、ロックフリーアルゴリズムの例や、CAS が正確に機能する方法、およびそれらの構造を実装するためにそれを使用する方法を見つけることができません。

0 投票する
5 に答える
563 参照

c# - メモリバリアの使用

次のコードサンプルでは、​​最新の値が確実に読み取られるようにするために、 FuncAのメモリバリアが必要ですか?

編集:そうでない場合、FuncAが最新の値を読み取るようにするにはどうすればよいですか?(最近の値が実際にプロセッサのキャッシュに保存されていることを確認したい)[ロックを使用せずに]

0 投票する
4 に答える
647 参照

c# - メモリフェンスはデータの「鮮度」にどのように影響しますか?

次のコード サンプル ( http://www.albahari.com/threading/part4.aspx#_NonBlockingSynchから取得)について質問があります。

これに続いて、次の説明が続きます。

「バリア 1 と 4 は、この例が「0」を書き込むのを防ぎます。バリア 2 と 3 は、鮮度を保証します。B が A の後に実行された場合、_complete の読み取りが true と評価されることを保証します。」

メモリバリアの使用が命令の並べ替えにどのように影響するかは理解していますが、言及されているこの「鮮度保証」とは何ですか?

この記事の後半では、次の例も使用されます。

この例の後に、次の説明が続きます。

「完全な変数が CPU レジスタにキャッシュされているため、このプログラムは決して終了しません。while ループ内に Thread.MemoryBarrier への呼び出しを挿入する (または読み取り完了をロックする) と、エラーが修正されます。」

もう一度…ここで何が起こりますか?

0 投票する
3 に答える
601 参照

c++ - 2 つの変数が同じスタックにあるかどうかをプログラムで確認する方法は? (Windows)

私はスレッドにいます。住所があります。そのアドレスは、私が使用しているのと同じスタック上の変数からのものですか?

実装する必要がありますon_same_stack(addr1, addr2)。Windows のスタックが必要に応じて増加することは知っていますが、増加には限界があること、および (少なくともデバッグでは) すべての関数呼び出しにスタック オーバーフロー チェック コードがあることも知っています。だから出来ると思います。

今、私はスレッドIDなどを使用できる/使用すべきであることも知っています. (CMPXCH16を避けたいと思っています)。私が何をしているのかをある程度知っていることを信じてください:-)。

これは、現時点では Windows 専用です。しかし、携帯性が高いほど良いです。(NT/XP/7/CE?)

PSこのサイトは「stackoverflow」と呼ばれているので、質問するのに適切な場所であるはずですよね? :-)

編集:誰もが尋ねているので、コンテキストを追加します。pthread_once または boost.threads call_once に似たカスタム call_once を実装しています。私は再帰をチェックしようとしています。私が取り組まなければならないことは非常に限られています。関数パラメーターを追加できません。プログラムの残りの部分が何をしているのか、たとえばどれだけの TLS が既に使用されているかを推測することはできません。などなど。私は自分の 1 つの関数内でしかコーディングできず、それ以外のことについて変更や仮定を行うことはできません。

質問/回答ありがとうございます。

0 投票する
7 に答える
4380 参照

c# - 連動バリアとメモリ バリア

次のコード サンプルについて質問があります ( m_valueは揮発性ではなく、すべてのスレッドが別のプロセッサで実行されます)。

Foo() でInterlocked.Exchangeを使用すると、Bar() が実行されたときに値「1」が表示されることが保証されますか? (値が既にレジスタまたはキャッシュ ラインに存在する場合でも?) または、m_valueの値を読み取る前にメモリ バリアを配置する必要がありますか?

また、(元の質問とは関係ありません)、volatile メンバーを宣言し、 InterlockedXXメソッドへの参照によって渡すことは合法ですか? (コンパイラは参照渡しで揮発性を渡すことについて警告するので、そのような場合は警告を無視する必要がありますか?)

注意してください、私は「物事を行うためのより良い方法」を探しているわけではないので、物事を行うための完全に別の方法を提案する回答を投稿しないでください (「代わりにロックを使用する」など)。 ..