1

我目前正在使用 G-Wan Web 服务器在 C 中开发一个 Web 应用程序,我想使用 G-Wan 附带的 KV Store 来存储生成的网页和页面显示次数的计数器.

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()被记录为原子操作。您可以使用它来更新您的计数器,但这比仅使用原子操作来增加nbDisplays计数器而不接触 HTML 指针(页面名称不会更改)要慢。

但是 G-Wan KV Store 的功能并没有使它看起来像一个hash map. 您不能使用hash map.

于 2012-08-21T20:12:37.490 回答