У меня есть одна нить, заполняющая очередь вызовами обратного вызова.Этот поток сначала блокирует мьютекс, а затем делает свое дело.
Второй поток получает указатель deque оригинальной deque и просто читает его, и я получаю сообщение об ошибке «невозможно разыменовать инициализированный значением итератор deque» при чтении deque.Я проверил, и я не выхожу за пределы deque.
Вот псевдокод:
// Thread 1
deque<float> main_deque;
void FillDeque()
{
MutexLock Lock(mutex);
for (size_t i = 0; i < main_deque.size(); i++)
{
main_deque.push_back(-10.0);
}
}
// Thread 2
void ReadDeque(deque<float> *main_deque)
{
for (size_t i = 0; i < main_deque->size(); i++)
{
float a = (*main_deque)[i];
}
}
РЕДАКТИРОВАТЬ: Если я изменяю deque на vector, все работает правильно.