У меня есть класс, представляющий различные виды инструментов (GCC, LEX, YACC, ...).
Каждому экземпляру присваивается тип, представляющий инструмент, и допускается специальная настройка.
Для обработки конфигурации по умолчанию у меня есть набор карт и векторные значения по умолчанию. Поскольку я хочу, чтобы этот класс можно было использовать в любом контексте, он должен был бы быть потокобезопасным, поэтому, чтобы избежать гонки, я реализовал следующее:
int Tool::addType(std::string typeName,
std::string typeFlagName)
throw (GP::Exceptions::LockAcquisitionException)
{
static std::timed_mutex mutex;
std::unique_lock<std::timed_mutex> lock{mutex};
int typeId = 0;
if (lock.try_lock_for(std::chrono::microseconds(100)))
{
int typeId = typeNames.size();
typeNames[typeId] = typeName;
typeFlagNames[typeId] = typeFlagName;
}
else
{
throw GP::Exceptions::LockAcquisitionException{"Unable to generate new type ID within 100 microseconds."};
}
return typeId;
}
Я хотел бы знать, является ли это хорошим решением или я что-то пропустил.
Если это нормально, есть ли другое решение, менее подробное?