Типичная реализация пула будет иметь свободный стек сегментов:
- когда запрашивается соединение, вытолкнуть его из стека
- когда соединение возвращается обратно в пул, поместите его в стек
Это способствует повторному использованию последнего использованного соединения, что хорошо для кэширования.
При установлении соединения с пользователем вы будете использовать RAII, чтобы он автоматически (и детерминированно) возвращался в пул при удалении всех ссылок на него.
Теперь вам решать, как обрабатывать события:
- Запрос соединения, когда его нет в наличии (вы можете подождать, построить новое и т. Д ...)
- Возвратите соединение, когда его уже много в стеке (мы хотим сохранить их так много?)
Это детали реализации вашего пула и должны быть адаптированы в зависимости от ваших требований.