0

mysql 行レベル ロックを使用したい。テーブル全体をロックできません。サーバーに対して2つの異なるメッセージを同時に処理する2つのプロセスを避けたい。と呼ばれるテーブルを持つことができると私が思ったこと: server_lockそして、1つのプロセスがサーバー上で動作を開始すると、テーブルに行が挿入されます。

このアプローチの問題は、アプリケーションがクラッシュした場合です。手動でロックを解除する必要があります。アプリケーションがクラッシュした場合に行レベルのロックとロックが解放される方法はありますか?

編集 言語として C++ を使用しています。私のアプリケーションはメッセージ キューに似ています。ただし、違いは、キューごとに 1 つのプロセスによって入力される 2 つのキューがあることです。アクションが同じオブジェクトに属し、両方が同じオブジェクトを処理している場合、アクションの後、間違ったデータになる可能性があります。したがって、両方のプロセッサが同じオブジェクトを同時に変更しないように、これら 2 つのキューにロック メカニズムが必要です。

4

1 に答える 1

0

次の 2 つの方法が考えられます。

  • ロックを解除するプログラムにエラー ハンドラを実装します。プログラムについて何も知らなければ、これを行う方法を言うのは難しいですが、ほとんどの言語には、クラッシュ時に終了する前に何らかの作業を行うための方法があります。何かが正しくないときにクラッシュが発生するため、これは危険です。作業を続けると、データベースなどを破損する可能性があります。
  • ロックを定期的に更新します。定期的にロックを再取得するスレッドをプログラムに追加するか、実行中のループでロックを再取得します。次に、ロックがしばらく更新されない場合、クラッシュしたプログラムに属していることがわかります。
于 2012-12-10T14:47:58.890 に答える