-1
我有了經常讀一些數據的多線程應用程序,偶爾的數據將被更新。我用upgrade_lock 有有書寫困難,通過使用unique_lock和問題閱讀我的問題的例子:升壓shared_mutex析構函數
void unlock(){
test.stream = 0;
test.mtx.unlock();
}
void lock_mtx(int i){
boost::unique_lock<boost::shared_mutex> lock(test.mtx);
test.stream = i;
boost::this_thread::sleep_for(boost::chrono::milliseconds(10000));
unlock();
boost::this_thread::sleep_for(boost::chrono::milliseconds(1000));
}
當我破壞lock
,互斥鎖已經由該線程解鎖,有時它被另一個鎖定線程,但析構函數使它再次釋放。鎖的破壞(在第一線程)第三挑線互斥和後我在一個時刻兩位作家
void lock_mtx(int i){
boost::upgrade_lock<boost::shared_mutex> lock(test.mtx);
read_from_locked();
boost::this_thread::sleep_for(boost::chrono::milliseconds(5000));
boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);
write_to_locked();
boost::this_thread::sleep_for(boost::chrono::milliseconds(10000));
}
的第二個問題是,當一些線程需要upgrade_lock
,其他線程無法讀取的共享對象
的問題都發生在MS的VisualStudio 2013和Windows8的64