【发布时间】:2011-09-11 12:44:57
【问题描述】:
谁能解释一下 boost::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() 解锁读锁,它不会死锁。但这似乎没有必要?
【问题讨论】:
标签: c++ multithreading boost