boost :: asio пряди против общего мьютекса - PullRequest
2 голосов
/ 25 марта 2011

Пытаетесь выбрать погоду для использования нитей asio?

Моя самая большая потребность в потоках - это доступ к базе данных с несколькими операциями чтения и одной записи.

Похоже, что пряди допускают только один поток за один раз, есть ли способ сделать многократное чтение и одну запись, используя пряди?

Почему пряди лучше, чем просто мьютекс?

1 Ответ

0 голосов
/ 29 марта 2011

Boost Strands сериализуют всю активность, которая им дана. Мьютекс часто используется, чтобы гарантировать, что один поток получает эксклюзивный доступ к ресурсу.

В вопросе упоминается, что вы хотели бы получить доступ к базе данных с несколькими читателями и одним писателем.

Я хотел бы рассмотреть возможность использования дизайна пула соединений с базой данных Пул соединений обычно позволяет вам настроить, сколько соединений в пуле, и у него есть семантика получения / выпуска. Если соединение недоступно, пул может вернуть ошибку, подождите, пока соединение не будет возвращено и станет доступным, или увеличьте число доступных соединений.

Для читателей может быть создан один пул соединений. Он может быть настроен так, чтобы иметь много доступных соединений, чтобы каждый поток мог каждый запросить соединение, использовать его и затем освободить его обратно в пул.

Второй пул соединений может использоваться для соединения с одним устройством записи. Этот пул должен разрешать только одно соединение с базой данных (то есть один писатель). Если соединение используется потоком, другие потоки могут подождать, пока соединение не освободится и оно не станет доступным.

В многопоточной конструкции всегда требуется дополнительная осторожность. Обязательно внимательно посмотрите, что / как каждый поток использует синхронизированные ресурсы, такие как пулы, описанные выше.

...