для кольцевого буфера, то чтоб писать в него из разных потоков, мне нужно защитить только индексы записи и чтения/удаления из буфера?
Какие индексы?
индекс текущей позиции в буфере, для записи и индекс для чтения/удаления из буфера который не должен быть равен индексу для записи
Как ты собрался защищать индекс?
ну... наверное мьютексами как нибудь через методы get set
Ты про значению собираешься отдавать элементы?
Неправильно
отдавать это читать?
а неправильность в чём заключается? )
Давай уже код показывай, и там видно будет.
Надо защищать весь вектор от записи и от чтения одновременно с записью
Потом что-то непонятно как это вектор и вдруг кольцевой буфер, в общем, если поставить мьютекс на весь вектор и блокироваться при записи в любое место и при чтении из любого места , будет точно ок
Ты что-нибудь понял?
Не очень
а разве имеет смысл защищать вектор, когда размер постоянный и хранит он указатели, если мы не обращаемся к нему из разных потоков к одному и тому же элементу?
Ну у тебя кроме вектора ещё два индекса-указателя в них. Не только вектор надо защищать.
какие индексы? index1, index2?
Ну указатель записи и чтения.
ну в смысле те что я отдельно создал?
а про защиту вектора, вопрос остался, если эти индексы будут правильно работать, можно оставить этот вектор без защиты?
спасибо! )
Главный принцип: Защищай ВСЁ, и ОДНИМ мьютексом. Также, используй lock guard-ы (есть в STD)
Обсуждают сегодня