jeudi 25 octobre 2018

How to implement scoped_lock functionality in c++11 using lock_guard

Looks like scoped_lock in c++17 gives the functionality I'm after however I'm presently tied to c++11.

At the moment I'm seeing deadlock issues with guard_lock when we call it with the same mutex more than once. Does scoped_lock protect against multiple calls (i.e. reenterent?)? Is there a best practice for doing this in c++11 w/ lock_guard?

mutex lockingMutex;

void get(string s)
{
    lock_guard<mutex> lock(lockingMutex);
    if (isPresent(s))
    {
        //....
    }
}

bool isPresent(string s)
{
    bool ret = false;
    lock_guard<mutex> lock(lockingMutex);
    //....
    return ret;
}

Aucun commentaire:

Enregistrer un commentaire