0

私は2種類のアプリケーションでC#を使用しています。1つはWebサービスで、もう1つはMVC3アプリケーションです。

私は両方で同じ問題を抱えています。要求されたときに、分散ノードが機能するレコードを返すメソッドを作成しようとしています。

並行性の問題により、これは危険です。プロセス「A」が作業するレコードを要求すると。データベースがレコードの「A」をチェックアウトする前にプロセス「B」が1つを要求した場合、両方が同じレコードを取得する可能性があり、これはこのシステムに悪影響を及ぼします。

Webサービスには、「GetRecordToProcess」と呼ばれるWebメソッドがあります。同じことを行うコントローラーには、対応するMVC3ActionResultもあります。

WebサービスとMVCアクションは相互に排他的である必要はありません。彼らは実際には2つの異なるテーブルで作業していますが、2つの別々のプロジェクトで同じ問題が発生しました。

私はMutexでこれの動作バージョンを持っていますが、baaaadであるMutex.WaitOneを呼び出すと、プロセスはCPUをほぼ60%まで実行しています。これを行うための簡単な方法の提案はありますか?これは、一般的な分散コンピューティングの要件であることは明らかなようです。私は一般的な解決策を知りません。

4

1 に答える 1

0

バックエンドは、並行性の問題を解決する責任を負う必要があります。たとえばCheckOut、レコードを現在チェックアウトしているユーザーを追跡するテーブルを作成できます。

GetRecordToRead()読み取り専用バージョンのレコードを返し、TryGetRecordToWrite()(新しいチェックアウト レコードを CheckOut テーブルに追加することによって) レコードのチェックアウトを試行し、成功した場合は書き込み可能バージョンの を返すように、Web サービスを拡張します。記録

于 2011-10-05T04:19:22.287 に答える