STL容器的线程安全

STL容器是线程不安全的。

线程安全的情况

  • 多个读取者是安全的。多线程可能同时读取一个容器的内容,这将正确地执行。当然,在读取时不能 有任何写入者操作这个容器。

  • 对不同容器的多个写入者是安全的。多线程可以同时写不同的容器。

线程不安全的情况

  • 在对同一个容器进行多线程的读写、写操作时。

  • 在每次调用容器的成员函数期间都要锁定该容器。

  • 在每个容器返回的迭代器(例如通过调用begin或end)的生存期之内都要锁定该容器。

  • 在每个在容器上调用的算法执行期间锁定该容器。

看到风险了吧?在工程中多线程操作STL的场景应该还是比较常见的,一个典型的例子就是用其来做生产者——消费者模型的队列或者其他共享队列,这样为了应对线程安全问题我们必须自己对容器操作进行封装。这是我自己实现的的封装类threadSafe_container.h,另外书中给我们介绍了一种更通用的封装方法,大家可以自己去参考实现

template    // 获取和释放容器的互斥量
class Lock {                    // 的类的模板核心;
public:                         // 忽略了很多细节Lock(const Containers container): c(container){getMutexFor(c); // 在构造函数获取互斥量}~Lock(){releaseMutexFor(c); // 在析构函数里释放它}
private:const Container& c;
};


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部