누군가 boost :: upgrade_lock에 대한 올바른 사용법을 설명해 줄 수 있습니까? 교착 상태boost :: shared_lock을 exclusive 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()로 읽기 잠금을 해제 경우 교착하지 않습니다에서 다음 코드 결과. 그러나 이것이 필요하지 않아야하는 것 같습니다.
아쉽게도 루프를 동시에 입력 할 수 있도록 여러 독자가 필요하므로 업그레이드 잠금을 사용할 수 없습니다. 설명 해줘서 고마워. –