- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个允许多个读者或一个作者访问数据的类。问题是读者可以有条件地成为作家,我想确保无论有多少线程想成为作家,只允许一个,其他线程等待作家完成并变回读者。
问题出在 if(condition)
语句,因为这可能会被多个线程评估为 true,导致它们都尝试成为写入器,即使数据只需要写入一次.
class Test {
public:
int getData() {
boost::shared_lock<boost::shared_mutex> lock(access_);
if(condition) {
writeData();
}
// Do stuff
}
void writeData() {
// Get exclusive access
boost::upgrade_to_unique_lock<boost::shared_mutex> unique_lock(access_);
// Do stuff
}
private:
boost::shared_mutex access_;
}
最佳答案
所以我以可接受的方式让它工作。基本上,如果需要写入,我会释放共享锁,然后写入函数将获得唯一锁。在写函数中获得唯一锁后,它再次检查以确保仍然需要写操作以处理多个线程认为他们需要写入数据的情况。
我知道这并不理想,因为当只有一个线程需要唯一锁时,在多个线程中等待唯一锁所花费的时间。但是,目前的性能已经足够好了,并且比以前有了很大的改进。
class Test {
public:
int getData() {
boost::shared_lock<boost::shared_mutex> lock(access_);
if(need_write) {
lock.unlock();
writeData();
lock.lock();
}
// Do stuff
}
void writeData() {
// Get exclusive access
boost::unique_lock<boost::shared_mutex> unique_lock(access_);
if(need_write) {
return;
}
// Do stuff
}
private:
boost::shared_mutex access_;
}
关于c++ - 使用条件编写器提升 shared_mutex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8931519/
这真的很奇怪。首先,我不知道您可以删除函数,其次,这发生在外部库中。 错误的情况是我正在使用 QtCreator 构建项目并一起 boost ,没有任何静态库。 使用的编译器是gcc myprogra
我正在尝试编写一个允许多个读者或一个作者访问数据的类。问题是读者可以有条件地成为作家,我想确保无论有多少线程想成为作家,只允许一个,其他线程等待作家完成并变回读者。 问题出在 if(condition
我的印象是,如果获取了太多共享锁,使用 c++17 的 std::shared_mutex 实现的多读/单写模式可能永远不会放弃唯一锁。 在 cppreference 上挖掘之后,我不确定情况是否如此
boost::shared_mutex 或 std::shared_mutex (C++17) 可用于单个写入器、多个读取器访问。作为一项教育练习,我整理了一个使用自旋锁并具有其他限制(例如公平策略)
我有一个小型模板类,它有一个 boost::shared_mutex 类型的非静态成员。每当我尝试编译它时,我都会收到错误: “boost::shared_mutex::shared_mutex”:无
我想将 shared_mutex 与共享/唯一锁一起用于读/写。 现在如果我有 2 个对象并且我希望它们使用相同的锁,我可以将第一个互斥锁的值分配给第二个互斥锁吗? 还是我必须创建一个指向 share
我有一个有几个读者和几个作家的类(class)。我想使用读/写锁(使用shared_mutex) 有关此锁的所有示例和信息,在同一个函数中使用和释放锁: std::shared_mutex 我想以这种
从 C++17(C++14) 开始,我们有了 std::shared_(timed_)mutex 类。很长一段时间以来,Qt 都有一个类似的类 QReadWriteLock。 QReadWriteLo
似乎 Boost 的 shared_mutex 是非递归的.. 周围有吗? (没有重新实现整个东西) 最佳答案 看看this thread这个excellent explanation为什么 shar
我在这个帖子中找到了 HowardHinnant 的答案。 C++11 equivalent to boost shared_mutex 不幸的是,它似乎使用了 Microsoft 编译器 (VS20
C++17 引入了 std::shared_mutex 类型。我一直在查看 CppReference 上的文档对产生未定义行为的情况特别感兴趣。 在通读两种解锁方法(一种用于释放独占所有权,一种用于释
我正在尝试使用 boost::shared_mutex 来实现多读取器/单写入器互斥锁。我的问题很简单,当另一个线程试图锁定该 shared_mutex 以进行写入时,一个线程是否有可能获得对 sha
C++17 引入了 std::shared_mutex 和 std::scoped_lock。我现在的问题是,当它作为参数传递时,scoped_lock 将始终以独占(写入器)模式锁定共享互斥锁,而不
boost::shared_mutex 是否有 C++11 等效项。或者在 C++11 中处理多读/单写情况的另一种解决方案? 最佳答案 我尝试过但未能将 shared_mutex 导入 C++11。
我有许多对象,每个对象都与一个 boost::shared_mutex 相关联(我需要共享/唯一锁功能)。 在代码中的某些场合,我需要一次获得多个对象的唯一所有权。 for (FileMetaData
通常,当使用“普通”互斥量时,您会像在 remove1() 中那样使用它。但是,现在有了 shared_lock 和 unique_lock,是否应该先使用共享锁,只有在必要时才使用唯一锁?请注意,当
查看C++ compiler support , 看来 std::shared_mutex 的未计时版本在 GCC 5.0+ 中可用。但是,即使使用 gcc version 5.3.0 2015120
我有一个多线程应用程序,它必须经常读取一些数据,并且偶尔会更新这些数据。现在,互斥锁可以安全地访问该数据,但它很昂贵,因为我希望多个线程能够同时读取,并且仅在需要更新时将它们锁定(更新线程可以等待其他
你有关于这个主题的任何信息吗?特别是 boost::shared_mutex 和读写器互斥体有什么问题吗? 读写器互斥体可能被滥用,例如即使与简单的互斥体相比,频繁的写入器锁定也会降低性能。但在很多情
嗨,Boost 爱好者们 我们遇到了 shared_mutex 的问题,并一直在深入研究 boost 源。我们无法判断这是否是一个死锁情况,或者我们只是不理解共享的读/写锁的互斥实现。 应用: 我们有
我是一名优秀的程序员,十分优秀!