問題タブ [readwritelock]

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

java - JavaReentrantReadWriteLockリクエスト

Sunのドキュメントが明確ではないため、JavaのReadWriteLocks(具体的にはReentrantReadWriteLockの実装)について簡単に質問します。

書き込みロックが別のスレッドによって要求されたときに、読み取りロックがスレッドによって保持されている場合はどうなりますか?書き込みロックスレッドは、現在保持されているすべての読み取りロックが解放されるのを待つ必要がありますか?また、書き込みロックが許可されて解放されるまで、すべての新しい読み取りロック要求はブロックされますか?

ありがとう

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

iphone - iPhoneで書き込み中にSQLiteデータベースから読み取ることはできますか?

書き込み中にSQLite dbから読み取ることは可能ですか?

書き込み時にアクセスがブロックされることは承知していますが、読み取りも同じですか?

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

java - ReentrantReadWriteLock の読み取りロックは、RandomAccessFile の同時読み取りに十分か

データベースファイルへの同時読み取り/書き込み要求を処理するために何かを書いています。

ReentrantReadWriteLockはうまくマッチしているように見えます。すべてのスレッドが共有RandomAccessFileオブジェクトにアクセスする場合、同時読み取りのファイル ポインターについて心配する必要はありますか? 次の例を検討してください。

getRecord() メソッドでは、複数の同時リーダーで次のインターリーブが可能ですか?

スレッド 1 -> getRecord(0)
スレッド 2 -> getRecord(1)
スレッド 1 -> 共有ロックを取得する
スレッド 2 -> 共有ロックを取得する
スレッド 1 -> レコード 0 をシークする
スレッド 2 -> レコード 1 をシークする
スレッド 1 ->ファイル ポインタでレコードを読み取ります (1)
スレッド 2 -> ファイル ポインタでレコードを読み取ります (1)

ReentrantReadWriteLock と RandomAccessFile を使用して同時実行の問題が発生する可能性がある場合、代替手段は何ですか?

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

perl - 読み取り/書き込みで開かれたファイルの縮小

パールでは:

排他ロックを使用して、読み取り/書き込みでファイルを開いています。

open( $f, "+< $filename" );
flock( $f, LOCK_EX );

以前に保持していたよりも多くのデータをファイルに書き込むと、ファイルが大きくなります。
書き込むデータが少ない場合、新しいコンテンツは先頭にありますが、古いコンテンツはファイルの末尾に残っています。

これは驚くべきことではありませんが、私が望んでいるものではありません。

ファイルを読み取り/書き込みで開いているときにファイルを圧縮する簡単な方法はありますか? 基本的に、正確にこのバイト位置でファイルを終了するように指示したいと思います。

別の方法で開くことができることはわかっており、それを行うことを検討していますが、1行の修正がいいでしょう。

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

java - 揮発性を混合し、読み取り/書き込みロックとして同期

たくさんのスレッドを読み取り、いくつかのスレッドを書き込んでいるプリミティブ型の変数を考えてみましょう。次のコードは正しく機能しますか?

もしそうなら、それは1)よりも優れたパフォーマンスを提供しますか?すべてのメソッドで同期を宣言します。2)。明示的なReadWriteLockを使用していますか?

これは一般的なパターンですか?そうでない場合、この状況では通常どのようなパターンが使用されますか?

これは現在私にとっては問題なく機能しますが、揮発性と同期の両方を使用するのは少し冗長だと思います。

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

java - プリミティブ型のゲッター/セッターは、マルチスレッドアプリケーションでReadWriteLockを使用してロックする必要がありますか?

マルチスレッドアプリケーションで使用されるJavaクラスがあります。同時アクセスの可能性が非常に高くなります。複数の同時読み取り操作はブロックされるべきではないので、ReadWriteロックを使用しています。

簡単にするためにtry...finally、この例ではロックの周りのブロックを省略しました。

プリミティブ型のゲッターとセッターをロック/同期する必要がある(または推奨されるとしましょう)かどうか疑問に思っていますか?Javaでの割り当てと戻りの操作はアトミックであることを私は知っています。ただし、これらのロックを使用することで、すべてのアクセサーが最新の値(を使用するのと同じvolatile)を取得することを確認しませんか?

プリミティブがdoubleまたはだった場合はどうなりlongますか?

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

objective-c - スレッドがロックされているかどうかを確認するにはどうすればよいですか?

スレッドセーフにしたいObjective-Cクラスを書いています。これを行うために、私は pthreads と a を使用していますpthread_rwlock(使用はやり@synchronized過ぎです。pthreads についてもう少し学びたいと思います)。メソッドで指定されたオブジェクトでロックが開始され、initで破棄されdeallocます。ロックを操作するには 3 つの方法があります。readLockwriteLockunlock。これら 3 つのメソッドは、関連する pthread 関数を呼び出すだけで、現在のところ他には何もありません。

以下に 2 つのオブジェクト メソッドを示します。どちらも writeLock を必要とします。

呼び出しsetAddValue:は最初に書き込みロックを取得し、次に呼び出しsetValue:atIndex:も書き込みロックを取得しようとします。ドキュメントには、これが発生した場合の動作は未定義であると記載されています。したがって、ロックを取得しようとする前に、スレッドがロックされているかどうかを確認するにはどうすればよいでしょうか?

(クリティカル セクションが別のロック要求をトリガーする呼び出しを行わないようにすることはできますが、それはコードの繰り返しを意味し、コードを DRY に保ちたいと考えています)。

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

objective-c - 目標 c または c で読み書きロックが必要

Objective C の読み書きロックが見つからないようです。これは iphone dev 用です。何か案は?この文書の付録にはいくつかのコードがありますが、不完全です。

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

java - 階層的なリエントラントの読み取り/書き込みロックのためにJavaで使用する戦略は何ですか?

階層的に編成されたリソースへのアクセスを管理するために、一連の読み取り/書き込みロックを階層的に編成する効率的なシステムを探しています。サブツリーが書き込み用にロックされている場合、サブツリーが解放されるまで、サブツリー全体で他のロックを取得できないようにする必要があります。同様に、サブツリーの書き込みロックは、親のロックを防ぐ必要があります。

これが私が考えていたアイデアです:

  • ApacheCommonsTransactionを使用します。残念ながら、プロジェクトは2008年3月以降更新されておらず、非公式に終了しています。一部のAPIドキュメントは、今後のバージョン(1.3または2.0)に何らかの階層ロックが含まれることを示しているようですが、ソースが見つからず、SVNリポジトリにアクセスできなくなっているようです。

  • 一連のReentrantReadWriteLocksを使用します。これは、階層的に編成します。私は並行性の専門家ではないので、自分でそれを行うのは少し怖いです。予備的な考えでは、サブツリーをロックする前に、ReentrantReadWriteLocks自体を管理する構造全体に外部ロックを使用する必要があることを示しているようです。そのため、ロックを解放する場合でも、外部ロックを使用する必要があります。 …</p>

  • からのクラスを使用java.util.concurrentjava.util.concurrent.atomicReentrantReadWriteLockて、一連のsで実行できるよりも効率的な方法で階層ロックを実装します。

私はその最後の道を進む準備ができていますが、この問題をよりよく解決する既存のライブラリが見つからないことに驚きました。それで:

  • 私はいくつかの明白な解決策を逃しましたか?
  • それとも、この問題を適切に解決するのは特に難しいですか?
0 投票する
1 に答える
837 参照

android - Android コンテンツプロバイダー ロック

contentprovider の関数で ReadWriteLock を使用する必要がありますか?

contentprovider のクエリで getReadableDatabase を実行し、開いているかどうかを確認してクエリを実行します。ただし、DatabaseIsClosed 例外でクラッシュすることがあります。これは、最初のプロセスを閉じる getWritebleDatabase を実行する挿入を別のプロセスが実行している可能性があります。

コンテンツプロバイダーに常にクエリと挿入を行うアプリとサービスを使用しています。そのため、コンテンツプロバイダーはスレッドセーフではないようです。

関数を同期化するのに役立ちますか?

ありがとう!