Есть класс UDP в нем определен вектор(играет роль буфера) так же определен QUdpsocket который привязан к порту и при каждом сигнале вызывает функцию чтения данных с сокета с последующей записью в вектор, еще есть пару функция по получению данных с вектора.
Суть вопроса в том что я тестировал и если вектор заносятся данные с сокета и в тоже время другой функцией я получаю данные с вектора ошибки не происходит. Надо ли перестраховываться мьютексом?
Или какую архитектуру сделать другую если на сокет посылается огромное количество данных и их без буфера не обработать в реал тайм))?
Любой наследник QObject не является потоко безопасным.
Операции с сокетами с помощью наследников QObject из разных потоков не безопасны даже с блокировками. Чтобы использовать как либо дескриптор сокета в разных потоках их надо отцеплять от управляющего наследника QObject.
Matweytt, что бы вы не делали, чтение и запись в пределах дескриптора сокета будет последовательным. Будет безопасно читать данные в другом потоке только если в первом тот же участок памяти не будет записываться. Следственно менять вектор нельзя, можно только при каждой порции данных создавать новый объект вектора и отправлять его указатель в другой поток, после этого никогда не редактировать данные с указателем в первом. Удобно для этого использовать shared pointer, так как данные будут автоматически удалены после использования в другом потоке.