問題タブ [readerwriterlock]

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 に答える
1538 参照

c++ - WinAPI / C++を使用するWindows上のプロセス間のマルチリーダー、シングルライター同期ロック

純粋なWinAPI/C ++を使用して、Windowsプラットフォーム上の単一プロセスのスレッド間でリーダー/ライターロックの同期を採用するよく知られたアルゴリズムがあります。

これが例です

私の場合、これを複数のプロセス間で行う必要があります。つまり、ライターは1つのプロセスにあり、リーダーは他のプロセスにあります。それを行う方法はありますか?

PS。すでに開発されたプロジェクトでこれが必要なので、C ++/MFCまたは純粋なWinAPI以外は使用できません。つまり、Boostなどの拡張機能は使用できません。

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

c++ - 条件変数を使用したリーダーライターロック

boostもtbbライブラリの条件変数にもリーダー/ライターロック(つまり、boostの共有ミューテックス)を操作するインターフェイスがないことがわかりました。condition_variable :: wait()はミューテックスロックのみを受け入れます。しかし、リーダーライターロックで動作させるのは非常に合理的だと思います。誰かがそれをサポートしない理由、または人々がそれをサポートしない理由を教えてもらえますか?

ありがとう、Cui

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

concurrency - リーダーとライターの同期の問題

最初のリーダー/ライターの問題が書き込みプロセスを枯渇させる理由を理解するのに苦労しています。つまり、コードはどのようにしてリーダープロセスに優先順位を付けますか? リーダー プロセスの 1 つが実行するときに、ライター プロセスがロックを取得できないようにする必要がありsignal(wrt)ますか? セマフォのリストが構成されているということですか (LIFO リスト内のリーダー プロセスの安定したストリームによってライターがどのように飢えているかがわかります)、リーダー プロセスに優先順位を与える方法ですか、それともここで何か基本的なことを誤解していますか?

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

c++ - C++ 最も洗練された方法でスレッドを同期する

私は次の問題を解決しようとしています。複数の解決策があることは知っていますが、それを解決するための最もエレガントな方法 (より少ないコード) を探しています。

私は 4 つのスレッドを持っています。そのうちの 3 つは、無限ループで揮発性整数変数に一意の値 (0、1、または 2) を書き込もうとします。4 番目のスレッドは、この変数の値を読み取り、値をstdout も無限ループにあります。

0 を書き込むスレッドが実行され、次に「印刷」スレッドが実行され、次に 1 を書き込むスレッドが実行され、次に再び印刷スレッドが実行されるように、スレッド間で同期したいと思います。 「印刷」スレッドの出力で、ゼロのシーケンス、次に1、2、0などのシーケンスが表示されることを期待しています...

これらのスレッド間で同期する最もエレガントで簡単な方法は何ですか。

これはプログラムコードです:

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

java - スレッドでゲッターとセッターを同期する方法

私はこのオブジェクトを持っています。アプリケーションにこのオブジェクトのインスタンスがあり、1 つのスレッドが比率変数に書き込み、他のスレッドが比率を読み取っています。比率変数を保護するこれは正しい方法ですか? ratio を volatile として宣言する必要がありますか?

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

mutex - ミューテックス、セマフォ、読み書きロックの違いは何ですか

それぞれについて説明するリアルタイムのシナリオをいただければ幸いです。pthread でこれらとは別に同期を処理する他の方法はありますか。ミューテックスは再帰的ミューテックス (リアルタイムのシナリオ) とどう違うのですか?

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

lock-free - ReaderWriter ロックフリーの実装

volatile 値を使用して、単純なマルチリーダー/シングルライター ロックを実装したいと考えています。

_InterlockedXXX は完全なフェンス バリアを提供し、私が正しければ "volatile" キーワードも提供しますが、考えられる欠陥と改善点について知りたいです。取得/解放セマンティクスの経験はありません。

私のコード:

また、これに対応しているライブラリをご存知でしたら教えてください。

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

c++ - 大きなサイズのライター/リーダー バッファー メカニズム - 高頻度データ c++

ライターがそれぞれほぼ 1 MB のサイズのデータ​​と 1 秒あたり 15 個のパッケージを継続的にプッシュする単一のライターと複数のリーダー (最大 5) メカニズムが必要です。これは c++ で記述されます。私がやろうとしているのは、1 つのスレッドがデータを書き続けている間、5 つのリーダーが同時にデータのタイムスタンプに従っていくつかの検索操作を行うことです。各データ パッケージを 60 分保持する必要があり、その後コンテナーから削除できます。

データは 15 MB * 60 秒 * 60 分 = 54000MB/h のように大きくなる可能性があるため、データを保持し、ライターとリーダーの両方にとって十分な速度で操作を行うには、ほぼ 50 GB のスペースが必要です。しかし、そのサイズのデータ​​をキャッシュや RAM に保持することはできないため、SSD などのハード ドライブに保存する必要があります (HDD はその種の操作には遅すぎます)。

これまで私が考えていたのは、(最大サイズを計算できるため) 循環バッファーを SSD に直接実装することでした。これは今まで適切な例を見つけることができず、可能か不可能か、またはハードドライブで利用可能なデータを検索するために、データのタイムスタンプとメモリの物理アドレスを保持するだけの 1 つの円形配列が RAM で利用可能になる何らかのマッピングメカニズムを実装すること. したがって、少なくとも検索操作は高速になると思います。

あらゆる種類のロック、ミューテックス、またはセマフォは操作を遅くするため (特に書き込みは重要であり、読み取り操作のためにデータを失うことはありません)、私はそれらを使用したくありません。利用可能な共有ロックがいくつかあることは知っていますが、それらにはいくつかの欠点があると思います。ロックフリー、ウェイトフリー、スレッドセーフでこのようなシステムを実装する方法/アイデアはありますか? データ構造 (コンテナー)、パターン、サンプル コード/プロジェクト、またはその他の種類の提案は高く評価されます。ありがとうございます…</p>

編集: RAMの量を増やす以外に何か考えはありますか?

0 投票する
0 に答える
51 参照

multithreading - ReaderWriter ロック、私のコードは例外を与えるだけです

私は Reader Writer Problem を実装しようとしています..何が問題なのかわかりませんか?
誰でも理由を理解するのを手伝ってもらえますか?

................................................................... .

それは私にますます多くの例外を与えるだけです!!! 待機中のスレッドがないときに notify() を呼び出した場合、問題はありますか?

定数文字列またはグローバル オブジェクトで wait() を呼び出すことはできないと思います。私はここでこれを見ました!

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

c# - タイムアウトが経過した後、ReaderWriterLock.UpgradeToWriterLock は例外をスローしませんか?

単体テストを書いているときに、ReaderWriterLock に関する非常に奇妙な問題に遭遇しました。タイムアウト オプションを 50 ミリ秒に設定して UpgradeToWriterLock メソッドをテストしてみました。

メイン スレッドでリーダー ロックを取得し、多数のタスクを開始します。タスクでは、リーダー ロックも取得してから、タイムアウトを使用してライターにアップグレードしようとします。メインスレッドが読み取りロックを保持しているため、これはすべてのスレッドで失敗するはずです。タイムアウトは 50 ミリ秒であるため、タスクはタイムアウト例外をスローして終了する必要があります。10 を超えるタスクを開始すると、開始されません。UpgradeToWriterLock でスタックします。

誰でも説明できますか?以下ソースコード全文。

興味深いのは、タスクを待機する前にメイン スレッド リーダー ロックを解放すると、すべてが期待どおりに機能することです。正しい数のタイムアウト例外がスローされます。