2つの質問があります。マルチスレッドのJavaアプリケーションがあります。スレッドがキーでgetAndLockを呼び出し、その直後に別のスレッドが同じキーでgetAndLockを呼び出すとどうなりますか?
最初のスレッドがロックを解除するまで、2番目のスレッドは自動的にブロックされますか?または、関数呼び出しはnullのCAS値で返されますか?または、例外をスローしますか?
最初のスレッドがキー(ドキュメント全体)を削除した場合、2番目のスレッドはどうなりますか?
2つの質問があります。マルチスレッドのJavaアプリケーションがあります。スレッドがキーでgetAndLockを呼び出し、その直後に別のスレッドが同じキーでgetAndLockを呼び出すとどうなりますか?
最初のスレッドがロックを解除するまで、2番目のスレッドは自動的にブロックされますか?または、関数呼び出しはnullのCAS値で返されますか?または、例外をスローしますか?
最初のスレッドがキー(ドキュメント全体)を削除した場合、2番目のスレッドはどうなりますか?
(塩の粒;私はpecl-memcacheセマンティクスに精通しているだけです)。
ドキュメントには、3秒間ロックを取得してから、に戻ると記載されていますOperationTimeoutException
。(mikeweidが指摘しているように)ロックがすでに存在する場合は、すぐに戻ってエラーメッセージにキーが存在することを示す必要がありますが、この場合にスローされる例外/エラーについてはドキュメントに記載されていません。
2番目の質問については、最初のスレッドがキーを削除した場合、そのキーが存在しなかったかのように返されるはずです。この場合null
。