2016-11-15 4 views
0

Чтение потоков вызовов at(i) функция и запись вызовов потоков push_back() функция, я получаю ошибку «вне диапазона», почему?Один поток, прочитанный и один поток, пишет std :: deque safe?

+0

Я думаю, что переменная 'size()' остается в регистре каждого ядра? используя «volatile», можно ли решить проблему для определенной ситуации, что «один читал одну запись»? – egraldlo

+0

Нет, это все еще UB. –

+0

напишите самостоятельную очередь, определите функцию 'size()', используя подсчет переменной volatile. – egraldlo

ответ

3

Вызов любой функции не-const-члена на любом стандартном объекте библиотеки не является потокобезопасным (если только некорректная функция не документирована иначе). Вам необходимо синхронизировать доступ к объекту, чтобы предотвратить скачки данных и, следовательно, неопределенное поведение.

+1

Использование функции «at» для deque также довольно неэффективно. –

Смежные вопросы