|
27 / 26 / 6
Регистрация: 22.03.2014
Сообщений: 277
|
|
Обращение к std::vector двумя потоками25.07.2016, 12:46. Показов 1871. Ответов 5
Доброго времени суток! Товарищи единомышленники, есть задача которая заключается в следующем:
Есть объект который непрерывно, последовательно посылает данные (координаты точек x и y), эти данные так же записываются непрерывно и последовательно в массив (в моем случае std::vector). Получается кольцевая запись в массив. Данные непрерывно записываются, а когда достигнут конец массива то запись происходит с самого начала. Есть второй поток которые считывает эти данные не постоянно, а только тогда когда первый поток заполнил массив до половины и начал записывать вторую половину. Второй поток ждет первого если тот не до конца записал порцию данных. При считывании вторым потоком своей порции данных происходит передача считанной информации в поток c GUI и отрисовка графика по полученным данным. Вопрос как лучше реализовать данную задачу? Как производить синхронизацию чтения и записи, при условии того что запись должна постоянно и непрерывно осуществляться? В моей реализации есть моменты когда запись порции данных уже завершена и надо начинать запись следующей порции, а чтение на части массива которая должна сейчас перезаписываться еще не завершено? PS: Читаю сейчас "Энтони Уильямс Параллельное программирование на С++ в действии 2012". Мне достаточно небольшой наводки, подсказки как лучше организовать эту структуру данных. Спасибо!
0
|
|
| 25.07.2016, 12:46 | |
|
Ответы с готовыми решениями:
5
Обращение к полю элемента std::vector'a
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 25.07.2016, 12:50 | ||
|
второй поток - не нужен.
1
|
||
|
27 / 26 / 6
Регистрация: 22.03.2014
Сообщений: 277
|
||
| 25.07.2016, 14:29 [ТС] | ||
|
Ilot, ознакомился с концепцией семафора, возникает проблема в том что запись должна осуществляться непрерывно постоянно, и если началось чтение одной половины массива то оно должно продолжаться до конца этой читаемой половины, а запись продолжаться во второй половине постоянно непрерывно(в идеальных условиях). Если использовать семафор то будет потеря данных или при записи или при чтении (смотря чему дать больший приоритет при реализации). Не могли бы Вы разъяснить этот момент?
hoggy, Возможно я не так понял работу семафора? Прошу указать на ошибку, спасибо.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 25.07.2016, 14:35 | ||
Сообщение было отмечено Mikhail1990 как решение
Решениеон готовит результат, и как только он готов - посылает посылку гую. гуй никого не ждет. как только его посылка готова - его уведомляют. здесь нет места для синхронизаций. нафиг не нужны ни мутексы, ни семафоры. самое главное - не нужен второй поток.
1
|
||
|
27 / 26 / 6
Регистрация: 22.03.2014
Сообщений: 277
|
|
| 25.07.2016, 14:42 [ТС] | |
|
hoggy, ага, так понятней. Спасибо.
0
|
|
| 25.07.2016, 14:42 | |
|
Помогаю со студенческими работами здесь
6
Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию? Вывести значения std::vector<std::vector<int*> > Как изменять размер std::vector<std::vector>? Std::vector<std::pair<std::vector<int>::iterator, std::vector<int>::iterator>
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|