Всем привет, имеется такой синглтон
class CSocketController {
std::vector<int> SocketsLst;
CSocketController() = default;
std::mutex mtx;
public:
CSocketController(const CSocketController&) = delete;
CSocketController(CSocketController&&) = delete;
CSocketController& operator=(const CSocketController&) = delete;
CSocketController& operator=(CSocketController&&) = delete;
static CSocketController& instance()
{
static CSocketController inst;
return inst;
}
void AddSocket(int fd)
{
std::unique_lock<std::mutex>(mtx);
SocketsLst.push_back(fd);
}
virtual ~CSocketController() = default;
};
И есть приложение которое запускает практически одновременно ок 100 тредов, каждый из которых юзает функцию AddSocket.
В итоге приложение при выходе крашется в самом конце, main полностью отработал. По дампу вычислил, что краш происходит на
virtual ~CSocketController() = default;
Крайне редко краш случается и при вызове функции AddSocket в одном и тредов, точнее на локе мьютекса, но это редко.
Погуглил немного, использование локальных статических переменных в разных тредах валидно. То есть инициализация не может быть частичной или разной у разных тредов. Никак не могу понять в чем дело.
Судя по дампу проблема в алокаторах в vector
Это я что-то делаю не так? Или это баг стандартной либы?