私は、ツリーのようなデータ構造を維持する並行プログラムのために、きめの細かいロック機能の実装を支援するプログラミング ツールを開発しようとして学術研究を行っています。
たとえば、プログラマーは、ツリーのルート ノードを受け取り、ツリーを変更する関数を作成することができます (いくつかのルートをたどり、ノードを追加/削除することによって)。それらを解放できる場所-関数を同じツリーで同時に実行できます。
このような細粒度のロックが使用されている実際のコード例、またはパフォーマンスを向上させるために使用できるが、プログラマーが実装するのが面倒だった (たとえば、関数中にツリー全体をロックした) いくつかの実際のコード例を探しています。 -無駄なノードを解放せずに呼び出します)。
ツリー型のデータベースを使用する JCR と Jackrabbit について読み、JCR でノードをロックする方法を説明する記事を見つけました (例はありません): http://www.day.com/specs/jcr/2.0/17_Locking .html
私はデータベースのバックグラウンドが非常に少なく、Jackrabbit データベースと同時実行に関して何が許可され、何が許可されていないかを完全には理解していません。2 つのスレッドから同じノードにアクセスすることは許可されていませんが、異なるリポジトリについてはどうでしょうか? また、2 つの異なるクライアントが同じノードにアクセスしようとするとどうなりますか (たとえば、1 つは削除しようとし、もう 1 つはそれを変更しようとします。session.save() は失敗しますか?)。
ありがとう、オレン