mardi 29 juin 2021

Check resource before and after the lock

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