2つの方法があるとしましょう-
getCurrentValue(int valueID)
updateValues(int changedComponentID)
これら 2 つのメソッドは、同じオブジェクトに対して別々のスレッドによって個別に呼び出されます。
getCurrentValue()
現在の valueID のデータベース検索を行うだけです。
" Values
" は、対応する変更の場合にcomponents
変更されます。このupdateValues()
メソッドは、変更されたばかりのコンポーネントに依存する値を更新しますchangedComponentID
。これはデータベース操作であり、時間がかかります。
この更新操作が行われている間、データベースからルックアップを行って古い値を返したくありませんが、更新メソッドが完了するまで待ちたいと思います。同時に、2 つの更新操作が同時に発生したり、読み取り中に更新が発生したりしたくありません。
だから、私はこのようにそれを行うことを考えています -
[MethodImpl(MethodImplOptions.Synchronized)]
public int getCurrentValue(int valueID)
{
while(updateOperationIsGoingOn)
{
// do nothing
}
readOperationIsGoingOn = true;
value = // read value from DB
readOperationIsGoingOn = false;
return value;
}
[MethodImpl(MethodImplOptions.Synchronized)]
public void updateValues(int componentID)
{
while(readOperationIsGoingOn)
{
// do nothing
}
updateOperationIsGoingOn = true;
// update values in DB
updateOperationIsGoingOn = false;
}
これが正しい方法であるかどうかはわかりません。助言がありますか?ありがとう。