2

たくさんのカウンターを備えたたくさんのスレッドがあります。スレッドはカウンターをデクリメントし、カウンターがゼロになると興味深いことが起こります。これは、アトミック ops で実装するのは簡単です。

ただし、スレッドまたはカウンターの数に関係なく、2 つのプロパティを保持する必要がある場合は、さらに難しくなります。

  1. スケーラビリティ: カウンターのデクリメントは O(ポリログ) です。
  2. コンパクトさ: カウンターあたりのメモリは O(1) です。

私はこれらのいずれかを単独で行う方法を知っています: 単純な実装はコンパクトで、階層的なカウントネットワーク [4] はスケーラブルです)。両方を行うことは可能ですか?

注: O(n) スレッドは、O(n) 未満の時間で O(n) 個の異なる変更 O(1) メモリを作成できないため、これを解決するには、異なるカウンター間でデータ構造を共有する必要があります。

[4]: J. Aspnes、M. Herlily、および N. Shavit。ネットワークを数えます。ACM のジャーナル、41(5):1020-1048、1994 年 9 月。

更新: Jed Brown は、O(1) 時間は不可能であるという明白な事実を指摘しました。ポリログに変更。

4

2 に答える 2

0

スケーラブルなカウンターに関する論文がありました。基本的に、各スレッドにノードがあるツリーがあり、その事実を inc/dec 投稿したいスレッドがあり、次にツリーを登り始め、一番上にあるカウンターまで、inc/dec 値を蓄積します。途中で、合計を上部のカウンターに適用します。(それが要点です - 余分な詳細がたくさんあります)。

inc/dec を 1 つのキャッシュ ラインから分散させますが、これはもちろんスケーラビリティを妨げるものです。

http://www.liblfds.orgの wiki でホワイト ペーパーをチェックしてください。そこにあります。

于 2012-07-29T10:46:22.613 に答える