Обновление Boost :: Shared_Lock для эксклюзивной блокировки

Может ли кто-нибудь объяснить правильное использование для повышения :: UPGRADE_LOCK. Следующий код приводит к тупике

//Global
typedef boost::shared_mutex Mutex;
typedef boost::shared_lock<Mutex> ReadLock;
typedef boost::upgrade_lock<Mutex> UpgradeLock; 
typedef boost::upgrade_to_unique_lock<Mutex> WriteLock;
Mutex sharedMutex;


//Multi threaded reader and writer
{
    ReadLock read(sharedMutex);

    for (int ii = 0; ii < vec.size(); ++ii) {
        Element e = vec[ii];

        if (e.needsUpdating()) {
            UpgradeLock upgrade(sharedMutex);

            WriteLock write(upgrade)

            //Do stuff
        }
    }
}

, он не заблокирует, если я разблокирую замок чтения с Read.unlock () перед обновлением. Но кажется, что это не должно быть необходимо?

7
задан Ben Reeves 11 September 2011 в 12:54
поделиться