【发布时间】:2014-10-10 13:18:35
【问题描述】:
我有一个多线程应用程序,它必须经常读取一些数据,并且偶尔会更新这些数据。我在使用 unique_lock 写入时遇到问题,在使用 upgrade_lock 读取时遇到问题 有我的问题的例子:
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 x64 中
【问题讨论】:
标签: multithreading visual-studio boost mutex