Потокобезопасные данные и потокобезопасные контейнеры - PullRequest
2 голосов
/ 16 июня 2009

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

1 Ответ

4 голосов
/ 16 июня 2009

Потокобезопасные данные :

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

  • Данные считаются потокобезопасными, если были приняты меры для обеспечения того, чтобы:

    • Он может быть изменен из нескольких потоков контролируемым образом, чтобы гарантировать, что результирующая структура данных не будет повреждена или приведет к гонке в коде.
    • Это может быть чтение надежным способом без повреждения данных в процессе чтения. Это особенно важно для контейнеров в стиле STL, в которых используются итераторы.
  • Мьютексы обычно работают, блокируя доступ к другим потокам, пока один поток изменяет общие данные. Это также известно как критическая секция , а RAII - это общая схема проектирования, используемая совместно с критическими секциями.

  • В зависимости от типа ЦП некоторые примитивные типы данных (например, int) и операции (приращение) могут не нуждаться в защите мьютекса (например, если они преобразуются в элементарную инструкцию на машинном языке). Однако:

    • Плохо делать какие-либо предположения об архитектуре процессора.
    • Вы должны всегда защищать код, чтобы гарантировать, что код останется поточно-ориентированным независимо от целевой платформы.

Потокобезопасные контейнеры :

  • Контейнеры, в которых предусмотрены меры для обеспечения того, чтобы любые внесенные в них изменения происходили в поточно-ориентированном режиме.

  • Например, потокобезопасный контейнер может позволять вставлять или удалять элементы, используя определенный набор открытых методов, которые гарантируют, что любой код, который его использует, является поточно-ориентированным.

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

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