Чтение с постоянно обновляемого вектора - PullRequest
0 голосов
/ 28 февраля 2020

Вот мой сценарий.

У меня есть вектор, содержащий Vec2s, который я читаю из памяти, я делаю это в отдельном потоке.

В основном потоке мой рендеринг l oop, который проходит через мой вектор и dr aws их на экран.

Однако моя проблема в том, что из потока, который извлекает значения, он часто обновляет этот вектор, поэтому, когда я go в l oop через вектор в моем рендере l oop, это вызывает доступ на чтение нарушения, поскольку элемент, в котором он находится в данный момент, был удален.

Каков наилучший подход, чтобы обойти это?

1 Ответ

0 голосов
/ 28 февраля 2020

Кажется, вы новичок в концепции параллелизма. Как уже упоминалось в комментариях, прежде чем двигаться вперед, вы должны понимать, как использовать общий ресурс между потоками. Но все же я объясню вам, как вы можете исправить свою текущую реализацию, но все же вы должны go ознакомиться с соответствующей документацией или руководством по использованию потоков. Пример:

//main program or thread
{
    //initialize vector
    //start secondary thread
    //ask for a lock from os
    //access or write on the vector
    //ask for unlock from os
}

//secondary thread running infinitely and will exit when a desired condition meets
{
    //ask for a lock from os
    //access or write on the vector
    //ask for unlock from os
}

До c ++ 11 ОС на базе Linux и ОС Windows имели разные реализации мьютекса. На многих устаревших системах они все еще используются. Как и в Linux ОС доступна pthread_mutex и аналогично для Windows она называется CriticalSection. Начиная с c ++ 11, эти концепции становятся частью стандарта и поэтому могут использоваться без учета зависимости от платформы, за исключением того, что компилятор должен иметь поддержку c ++ 11. Для более детального понимания того, как безопасно и правильно использовать механизм блокировки, я предлагаю вам поискать примеры в Интернете.

Спасибо. Счастливого программирования.

...