2010-11-26 2 views
0

私のプログラムには、いくつかのデータ型(int、string、またはユーザー定義のクラスオブジェクト)と複数のスレッドの配列があります。私は配列がいくつかの値で初期化された後に更新されているかどうかを調べることができるようにしたい。 1つのアイデアは配列の値のハッシュを関連付けることで、配列が更​​新されているかどうかを確認したいときはいつでも、ハッシュを再計算します。 C++でそれを行う他の方法はありますか?最後にチェックしてからメモリアドレスの範囲が更新されたかどうかを確認できますか?配列の更新をチェックする方法

おかげ

+0

それはとても多くのものに依存し... 1)あなたはそれを変更するコードへのアクセス権を持っているのですか?そうでない場合は、2)変更頻度、これらのチェックを実行する頻度、およそどれくらいですか?ああ、なぜあなたはそれを必要としますか? – ruslik

答えて

3

必要な読み書き操作のファサードを提供するクラステンプレートに配列をカプセル化し、更新時に配列dirtyをマークすることもできます。各検査でdirtyフラグをリセットします。

これを複数のリーダー/ライタースレッドでどのように信頼できるものにするかわかりませんが、アクセスパターンと正確なセマンティクスに依存していると思います。

[ハッシュは常に衝突することができるので、ハッシュが動作しません。]

+0

はい、おそらく良いアイデアです。 – user352951

+0

もっと洗練された解決策関係者(Observer)がコールバックを登録できるようにして、配列データ(Observable)が変更されるたびに即時通知(Observerパターン)が発生するようにします。私は過度の負担を強いられています。 –

+0

ありがとう、私はこれを実装しようとします。 – user352951

3

ハッシュアプ​​ローチは、オブジェクトが変更された場合は気が、その後その初期値にリセットしていない場合にのみ機能します。この場合、オブジェクトは「更新」されましたが、ハッシュを使用する方法はありません。

もう1つの方法は、更新カウンタを使用することです。更新するたびに整数をオブジェクトの横に置き、増分することです。

+0

私はオブジェクトが変更されても問題ないですが、同じオブジェクトにリセットし直しています。 Watはすべての可能なデータ型で機能するよいハッシュ関数です。テンプレート化されたハッシュ関数?また、更新カウンターは文字列、intなどでは機能しません – user352951

+0

シーケンス番号は良い考えです –

+0

@ user352951:可能なすべてのデータ型に対して良いハッシュ関数を書くことはできません。どのビットが論理値に含まれるかを示す必要があります。つまり、パディングや(おそらく可変の)キャッシュデータなどを無視します。また、等価性についていくつかの決定をする必要があります(つまり、データ型によっては、または論理的な値を考慮する必要があるかもしれません。 –

関連する問題