следующего фрагмента коды вызывает Assert„Deque итератора не разыменовываемый“с последующим исключением:«Deque итератора не dereferencable` при этом зОм :: deque-> фронт()
if (data[n].stateFlagQueue->empty()) cstate=0;
else
{
cstate=data[n].stateFlagQueue->front();
if (data[n].stateFlagQueue->size()>1) data[n].stateFlagQueue->pop();
}
утверждает, происходит с данными [n] .stateFlagQueue-> front(), а stateflagQueue имеет размер 3, поэтому имеется достаточно данных. Весь код, приведенный выше, обеспечивается взаимной блокировкой, то же самое верно и для кода, который выполняется в отдельном потоке и заполняет stateFlagQueue с данными:
if ((data->stateFlagQueue->empty()) ||
(data->stateFlagQueue->back()!=data->m_response.cstate))
data->stateFlagQueue->push(data->m_response.cstate);
Итак ... как это может произойти, это исключение по-прежнему происходит?
Спасибо!
Опубликовать [MCVE] (http://stackoverflow.com/help/mcve). – juanchopanza
Его * тот же мьютекс * для обоих блоков, верно? Вы знаете, одно достаточно важное, чтобы упомянуть, но, по-видимому, не показывать нам. – WhozCraig
WhozCraig: да, это тот же мьютекс. Функция блокировки/разблокировки размещается точно вокруг фрагментов кода, которые я разместил здесь. – Elmi