boost :: upgrade_lockの正しい使い方を教えてください。デッドロックboost :: shared_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()で読み込みロックを解除した場合にそれがデッドロックしないで次のコードの結果。しかし、これは必要ではないと思われますか?
残念ながら、ループを同時に入力できるように複数のリーダーが必要なので、アップグレードロックを使用することはできません。説明をありがとう。 –