В настоящее время я разрабатываю веб-приложение на C с использованием веб-сервера G-Wan, и я хочу использовать KV Store, включенный в G-Wan, для хранения сгенерированной веб-страницы и счетчика количества просмотров страницы. .
Хранилище KV — это хэш-карта, которую можно использовать для хранения сложных данных, таких как структуры.
Это то, что я использовал для хранения данных HTML и целого числа, которое является счетчиком:
typedef struct
{
char* HTML;
int nbDisplays;
} my_data;
Веб-сервер использует несколько потоков, и хранилище KV совместно используется потоками.
Для обновления поля nbDisplays я использую атомарную операцию __sync_fetch_and_add (...) Но я не знаю, как лучше всего обновить поле HTML, которое является указателем.
Это лучше:
- построить новую структуру, используя существующую, хранящуюся в KV, чтобы получить текущие значения и добавить их в хранилище KV с помощью функции add(), предоставляемой G-WAN (эта функция заменяет старую структуру новой)
- Или обновить напрямую значения структуры, хранящиеся в хранилище KV?
Я не привык программировать в многопоточной среде и боюсь некоторых "странных" поведений...