質問

(私はダブルチェックし、ロックが何であったかを知っていた前に)私は私のCFのアプリで、二重にチェックロックのバージョンを使用しています。

基本的に、私は、オブジェクトのexistanceをチェック。それが存在しない場合、私は(通常は名前のロックを使用して)、私は試してみて、私は再びexistanceをチェックするオブジェクトを作成する前にロックします。私は、これが作成されている複数のオブジェクトを停止し、システムに過度のロックを停止するにはきちんとした方法だと思っています。

過度なロックとオブジェクトの複製が作成されませんが存在しないという点で、

これは、動作しているようです。しかし、私は最近、ダブルでdosn't仕事をロックチェックすることを学びましたJavaので、これはCFスレッドとロックがネイティブJavaスレッドとロックと全く同じではありませんとして見て、CFに成立した場合にどのような私にはわからないことはあります。

正しい解決策はありません

他のヒント

ベン・ドゥームは、Javaについて語ったものに上に追加するには、これは特に、あなたのアプリケーション変数を設定するアプリケーションの初期化ルーチンでは、ColdFusionでかなり標準的な方法です。

少なくとも一つのロックをせずに、Webアプリケーションへの最初のヒットのすべてが同時にアプリケーション変数を初期化せています。これは、アプリケーションがこれを保証するのに十分なビジー状態であることを前提としています。危険性は、あなたのアプリケーションは、アプリケーションが最初に起動された時点でビジー状態の場合にのみ存在します。

最初のロックは、一度に1つの要求のみがあなたの変数を初期化を確認します。

最初の中に埋め込まれた第2のロックは、あなたの初期化コードの末尾に定義された変数は、application.startedとして、存在することを確認するチェックします。それが存在する場合、ユーザーが追い出されます。

ダブルロックパターンは非常に忙しいのサイトでは、しかし、忙しいのサイト上で私の肌を保存している、完了するために、アプリケーションの初期のヒットのための要求のキューはあまりにも速く、あまりにも高く登ると、サーバがクラッシュする可能性があります。アイデアは、リクエストが遅い最初のヒット、待っているされ、そしてもう一つは最初のcflockに侵入し、かつ迅速に拒否されます。キュー内の要求の数百または数千は、ミリ秒ごとに成長していると、彼らはすべての最初のcflockブロックまでファネリングされています。解決策は、スロー(またはキャッチと鴨)ロック・タイムアウト・エラーを最初のcflockに非常に低いタイムアウトを設定していないことです。

最後の注意点として、私が説明し、この動作は、あなたのApplication.cfcのColdFusionの7のonApplicationStart()メソッドで廃止されました。あなたがonApplicationStart()を使用している場合は、アプリケーションの初期化ルーチンのために、すべてのロックすべきではありません。 Application.cfcのはよくすでにロックされています。

ColdFusionで、はい、ダブルチェックロック作品を締結します。これは、いくつかの特定の状況で有用ですが、右のそれを行います。私はそれがJavaのスレッドモデルにとして反対に動作する理由の概略を知らない、チャンスはそれが手動でColdFusionサーバーのバックグラウンドでのルックアップテーブルのいくつかの並べ替えをチェックしていますされます。

Javaはスレッドセーフなので、彼らが必要とされないこととして、あなたのロックが機能しないということはあまりありません。基本的には、CF 6+で、ロックが(例えば、ファイル)は、Javaのコントロール外に存在するオブジェクトをalthering /競合状態を予防または作成するために必要とされます。

ワームの全体の他の缶を開くには...

なぜあなたは、あなたのオブジェクトを追跡し、循環依存を防ぐために、このようColdSpringとして、依存性注入のライブラリを使用しないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top