锁定写入,解锁读取

时间:2010-12-04 15:52:52

标签: c++ multithreading

算法问题

如何只允许对象上的以下类型的线程操作?

  • 多个同时读取,无写入
  • 单次写入,无读取

示例:STL容器的包装器允许从多个线程进行高效搜索。为简单起见,假设不能从有问题的包装器外部访问迭代器。

让我们假设我们有信号量和互斥量。

我知道boost库已经实现了这个概念。我想知道这通常是怎么做的。

2 个答案:

答案 0 :(得分:1)

使用boost::shared_mutex来处理频繁读取,不频繁的写访问模式。

正如您所指出的,STL容器是“漏洞”,因为您可以检索迭代器,该迭代器必须被视为写入的隐式持续操作(如果是非常量)或读取(如果是常量),直到迭代器超出范围。当您持有这样的迭代器时,其他线程写入容器可能会使其无效。您的包装器必须经过精心设计才能处理这种情况并保持包装器类的高效。

答案 1 :(得分:1)

你想要一个“多读者/单一作者”互斥体:Boost.Thread提供一个。{/ p>