Может ли кто-нибудь объяснить правильное использование для повышения :: 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 () перед обновлением. Но кажется, что это не должно быть необходимо?