编写线程安全容器

时间:2011-07-14 09:58:41

标签: c++ multithreading

有人可以推荐一本关于如何编写线程安全容器的好书吗? 感谢

4 个答案:

答案 0 :(得分:3)

线程安全容器没有银弹

E.g。无论您使用什么容器,此代码都不是线程安全的:

if (!container.has(value)) container.add(value);

两者都不是:

container[value] = container[value] + 42;

代码可以使线程安全,但它需要的不仅仅是线程安全的容器。

更糟糕的是:线程安全的容器不会给你带来太多帮助。它们可能对您在教科书中找到的简单案例有所帮助,但在实践中存在的更复杂的案例中,无论如何都需要锁定(参见上面的典型案例)。在这种情况下使用线程安全容器将是纯粹的开销。

看一下Java,因为它始于线程安全容器。几年后,Java转而使用不安全的容器,并弃用旧的,线程安全的容器。

所以我的建议是:不要寻找线程安全的容器。相反,寻找一本好书如何编写线程安全代码

更新以澄清:我在谈论标准容器,如矢量,地图和字符串。

答案 1 :(得分:1)

1024cores.net充满了关于编写线程安全代码的好文章。

答案 2 :(得分:1)

尝试在lock-free data structuresnon-blocking algorithms上寻找物资。 (Another article。)

了解关键部分等是很常见的,但是当有很多读取和少量写入时,无锁定的并发方法很有效。

这种算法与重入概念和异常安全等重要概念有许多共同之处。

更广泛地说,线程安全性与数据依赖性和所有权模型有很大关系。它的结果是,如果线程安全程序在其他方面设计得很好,则它们相对容易编写。恕我直言,良好设计的整体方法可带来好处 - 首先获得您的数据 ,之后,代码很容易实现。

答案 3 :(得分:0)

STL port 是一个提供线程安全的STL实现,您可能需要查看它。