問題タブ [copy-on-write]

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 投票する
2 に答える
3082 参照

java - CopyOnWriteArrayList を List にキャストすると、並行性の保証が失われますか?

上記(タイトル)は私の主な関心事です。そしてケースは

結果のリストはget()負債から取得されますか? それは何が起こるかに影響しますか、minそれとも独自のコピーですか? たとえば、結果を反復処理している場合、get()その効果は何ですか?

また、そうしているうちに、逆はどうですか?私が行った場合

3行目以降の並行処理の対応safeStuff状況は?stuffs

0 投票する
2 に答える
7047 参照

c++ - STL でのコピー オン ライトのサポート

コピー オン ライトに関するウィキペディアの記事を読んでいて(それをサポートするファイルシステムがあるかどうか知りたいです)、次の一節に驚きました。

COW は、カーネルの外部、ライブラリ、アプリケーション、およびシステム コードでも使用されます。たとえば、C++ 標準ライブラリによって提供される文字列クラスは、コピー オン ライトの実装を許可するように特別に設計されています。

コピー オン ライトがすべて STL でサポートされていることを知りませんでした。本当?や など、他の STL クラスにも適用されますstd::vectorstd::array? その最適化をサポートしているコンパイラはどれですか (特に、G++、Intel C++ コンパイラ、および Microsoft C++ コンパイラについて知りたいです)。

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

c# - .NET でコピー オン ライト リストを作成する方法

.NETでコピーオンライトモデルを使用してスレッドセーフリストを作成する方法は?

以下は私の現在の実装ですが、スレッド化、メモリバリアなどについてたくさん読んだ後、ロックのないマルチスレッド化が関係する場合は注意が必要であることがわかりました。これが正しい実装であるかどうか、誰かがコメントできますか?

編集

より具体的には、上記のコードはスレッドセーフですか、それとも何か追加する必要がありますか? また、最終的にすべてのスレッドで参照が変更されるのlistでしょうか? volatileまたは、リスト フィールドにキーワードを追加するか、Contains メソッドに参照へのアクセスとそのメソッドの呼び出しの間に Thread.MemoryBarrier を追加する必要がありますか?

たとえば、Java 実装は上記のコードのように見えますが、そのようなアプローチは .NET でもスレッドセーフですか?

そして、これは同じ質問ですが、Javaでもあります。

これに関連する別の質問があります

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

arraylist - CopyOnWriteArrayList と ConcurrentHashMap の原理の違い

高度な Java コレクション API には、CopyOnWriteArrayList と ConcurrentHashMap があります。しかし、これらのデータ構造の根底にある原則は異なります。つまり、ConcurrentHashMap は、書き込み操作が行われている Map のセグメントのみをロックします。これにより、パフォーマンスに影響を与えずに同期の問題を回避できます。

一方、CopyOnWriteArrayList は、元の List の複製を作成することにより、同時実行の問題を防ぎます。なぜこれらの実装は非常に異なるのでしょうか? Java は、どちらがより適切に機能するかを確認するためのテストにすぎませんか?

0 投票する
2 に答える
288 参照

string - 自動的に起動しないときに文字列の COW をトリガーする方法

背景情報については、この質問を参照してください。

背景
私は (ほぼ) 通常の整数のように動作する bignum クラスを使用しています。
したがってa:= 1000000*10000000*12000000*10000000*1000000;、完全に有用な結果が得られます。この目的のために、 のレコードを使用しclass operatorsます。これらは、自動型変換と初期化をトリガーします。aを別の に割り当てているため、変換がない場合を
除きます。 TBigintTBigint

ソリューション
Ansistring を使用してコア データを保存します。コピー オン ライトがあり、必要に応じて自身のクローンを作成します。

問題: (文字列を変更していることを Delphi が認識しない場合、COW は機能しません)として偽装され
た Digit を操作する純粋なアセンブラ ルーチンがいくつかあります。 dynamic arrayAnsistring

ただし、次のようなことをすると:

X股関節が関節でLocX、一方に何が起こっても他方に起こります。明らかに、Delphi は asm ルーチンが変更
されていることを認識していないため、COW が適切です。DivBigintLocX


ルーチンを次のように変更した場合の回避策:

Delphi はすべて手がかりをつかみ、問題なく動作します。 LocXリンクが解除され、Xすべて正常に動作します。
ただし、空きスペースの途中でばかげた変更を加えたくありません。

文字列でトリガーCOWを強制する適切な/適切な/公式*の方法はありますか?
システムコールのようなものでしょうか。

※お好きな選択肢に〇をつけてください(手描きの〇付き)

0 投票する
2 に答える
156 参照

svn - バージョン管理されたファイルのsvnコピーオンライトセマンティクス:svn:externalsのユースケース?

新しいブランチが、それらのファイルのコピーではなく、前のブランチのファイルへのポインターを持つ svn ブランチの論理的な進行を作成しようとしています。新しいブランチでファイルを変更すると、古いブランチのコピーから切断されます。(したがって、コピー オン ライト) 実際のファイルはソース コードではなく、テキスト ファイルです。私はここで可能性を探っており、この提案されたレイアウトに関するフィードバックを求めています.

ルート レベルでブランチを使用する典型的なサブバージョン シナリオから始めます。新しいブランチを作成すると、最新のブランチのコピーとして開始されます。たとえば、次のようになります。

ブランチ 1 はメンテナンス モードになりました。新しい開発はブランチ 2 で続行されます。

収量

私が望むのは、AとBを切断されたコピーにする代わりに、それらをポインターにすることです

したがって、ブランチ 2 のファイル A は、ブランチ 1 のファイル A への「変更をシームレスに追跡」します。ブランチ 2 のファイル A がブランチ 1 のファイル A と異なることが必要になった場合、「リンクを解除」し、ファイルを開き、そこから移動します。

私の読書から、これは svn:externals で可能かもしれません。svn コピーの代わりに、ブランチ 1 のディレクトリ構造をブランチ 2 にコピーするスクリプトを作成し、ファイルを含むディレクトリごとに、ディレクトリに svn:externals プロパティを作成し、前のブランチからのファイルへの URL を指定します。

ここに私の質問/問題があります:

  • ブランチ/2/A の svn:externals コピーからブランチ/1/A を変更できないようにしたい。これは、svn:externals 定義をリビジョンにペグすることによってのみ可能であり、目的全体が無効になると思います。svn:readonly のようなものはありますか? (私が見つけたわけではありません)

  • svn:externals の定義は再帰的ではありません。つまり、 ^/branches/3/A -> ^/branches/2/A (それ自体が指す) -> ^/branches/1/A は不可能です。3 つのブランチがある場合、3 と 2 の両方が明示的にブランチ 1 を指す必要があります。

私が達成しようとしている主なことは、あるブランチでファイルが作成されると、それ以降のブランチは常にそのファイルに自動的に変更を加えるということです。「そのリンクを壊す」ために、これらのファイルの管理者は明示的なアクションを実行する必要があります。

これを設定するより良い方法はありますか?