Я использую boost :: dynamic_bitset для отслеживания нескольких подключений tcp. Если он подключен, он установлен в 1, в противном случае он установлен в 0. И каждое соединение является одним потоком. Должен ли я защищать бит, установленный из нескольких потоков? или Это необязательно, поскольку он не изменяет размер бита после его создания?
Очень необычно, что вы фактически управляете одним битом при работе в битете. Обычно происходят следующие вещи:
Это не boost::dynamic_bitset
specific, это также относится к std::bitset
например. В этом случае вы всегда должны посмотреть документацию. Поскольку в документации не упоминается явная безопасность потоков, у вас, скорее всего, будет состояние гонки.
Поэтому вы должны защитить свой битсет.
class/struct Connection
, можно просто добавить элемент атомного BOOL / флагalive
им. Вы также можете использовать коллекцию атомарных переменных (например,std::vector< std::atomic<bool> >
), однако имейте в виду, что сам контейнер не должен быть изменен в этом случае.