boost :: dynamic_bitset многопоточная проблема

0

Я использую boost :: dynamic_bitset для отслеживания нескольких подключений tcp. Если он подключен, он установлен в 1, в противном случае он установлен в 0. И каждое соединение является одним потоком. Должен ли я защищать бит, установленный из нескольких потоков? или Это необязательно, поскольку он не изменяет размер бита после его создания?

Теги:
boost

1 ответ

1
Лучший ответ

Очень необычно, что вы фактически управляете одним битом при работе в битете. Обычно происходят следующие вещи:

  1. Загрузка x байтов (x зависит от вашего компьютера и фактической реализации)
  2. Манипулировать конкретный бит в этих байтах
  3. Сохраните x байты в контейнере битета.

Это не boost::dynamic_bitset specific, это также относится к std::bitset например. В этом случае вы всегда должны посмотреть документацию. Поскольку в документации не упоминается явная безопасность потоков, у вас, скорее всего, будет состояние гонки.

Поэтому вы должны защитить свой битсет.

  • 0
    Благодарю. Вместо использования bitset, есть ли лучший подход без использования блокировки? используя атомное целое число.
  • 0
    @MichaelD: это зависит от вашей структуры данных. Если организовать соединения как class/struct Connection , можно просто добавить элемент атомного BOOL / флаг alive им. Вы также можете использовать коллекцию атомарных переменных (например, std::vector< std::atomic<bool> > ), однако имейте в виду, что сам контейнер не должен быть изменен в этом случае.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню