1

現在、G-Wan Web サーバーを使用して C 言語で Web アプリを開発しています。G-Wan に含まれる KV ストアを使用して、生成された Web ページとページが表示された回数のカウンターを保存したいと考えています。 .

KV ストアは、構造などの複雑なデータを格納するために使用できるハッシュ マップです。

これは、HTML データとカウンターである整数を格納するために使用したものです。

typedef struct
{    
  char* HTML;    
  int nbDisplays;    

} my_data;

Web サーバーは複数のスレッドを使用しており、KV ストアはスレッド間で共有されています。

フィールド nbDisplays を更新するために、私はアトミック操作 __sync_fetch_and_add (...) を使用していますが、ポインターであるフィールド HTML を更新する最良の方法が何であるかわかりません。

それは良いですか:

  1. KV に保存されている既存の構造を使用して新しい構造を構築し、現在の値を取得して、G-WAN が提供する add() 関数を使用して KV ストアに追加します (この関数は古い構造を新しい構造に置き換えます)。
  2. または、KV ストアに格納されている構造体の値を直接更新するには?

私はマルチスレッド環境でのプログラミングに慣れておらず、いくつかの「奇妙な」動作に怯えています...

4

1 に答える 1

1

kv_add()不可分操作として文書化されています。これを使用してカウンターを更新することもできますが、これは、アトミック操作を使用してHTMLポインターに触れずnbDisplaysにカウンターをインクリメントするよりも低速です(ページの名前は変更されません)。

ただし、G-Wan KV Storeの機能では、これはのようには見えませんhash map。を使用してこれらの範囲クエリを実行することはできませんhash map

于 2012-08-21T20:12:37.490 に答える