Вопрос по синхронизации доступа к элементам массива в MFC

Olenenok

Как сделать используя средства MFC? Или вообще нельзя, можно только для массива в целом?

kokoc88

Для каждого элемента придётся сделать критическую секцию. Думаю, что если элементы в массиве тривиальные (например, int/double то лучше не делать синхронизацию для каждого элемента.

Olenenok

Ну нет, элементы в массиве не тривиальные. Хотя, это уже не важно. Я понял, что для моей задачи лучше использовать очередь. Ну, и вопрос: можно писать с одного потока в начало std::deque, а с другого в конец? Не может ли здесь произойти наложения при использовании? Конечно, меня интересует это в Visual C++.

kokoc88

Ну если тебе нужна простая очередь, то она делается на основе списка за 5 минут. Если тебе нужна очередь с ожиданием, то это уже сложнее.

rosali

простая очередь ... на основе списка за 5 минут
На то чтобы написать std::queue<some_t, std::list<some_t> > уходит 5 минут?

Olenenok

Честно говоря, в первый раз слышу про std::queue.

Realist

1) Не изобретай велосипед, используй стандартные реализации очередей и массивов, если не поймешь, что тебе обязательна нужна собственная
2) Да, если один поток пишет с одной стороны очереди, а другой -- с другой, скорей всего будут траблы. Например, если ты хранишь разиер очереди и два потока пробуют его увеличить на единицу командой size++, то в результате size может увеличится на 2, а может и на 1. Конкретное проблемное место зависит от реализации.

kokoc88

Ну добавь туда синхронизацию, скажешь, у тебя на это уйдёт меньше пяти минут?
Оставить комментарий
Имя или ник:
Комментарий: