I've run into code that simplified looks like this
inline someClass* otherClass::getSomeClass()
{
    if (m_someClass)
        return m_someClass.get();
    std::unique_lock<std::shared_mutex> lock(m_lock);
    if (m_someClass)
        return m_someClass.get();
    m_someClass= std::make_unique<someClass>(this);
    return m_someClass.get();
}
So it seems it's a pattern to be sure thread safety of creation of someClass object. I don't have much experience in multithreading, but this code doesn't look nice to me. Is there some other way to rewrite this or it's a way it should be?
Aucun commentaire:
Enregistrer un commentaire