std::queue
来源:互联网 发布:数据库用户名是什么 编辑:程序博客网 时间:2024/06/06 06:53
std::queue 是 stl 里面的容器适配器, 用来适配FIFO的数据结构。
std::queue, 入队列的方法是: std::queue::push(),
出队列的方法是: std::queue::pop(), 为了异常安全, 这个方法返回void, 所以通常调用std::queue::front(), 查看队列头部的元素, 然后调用std::queue::pop(), 让元素出队列.
今天在写一个服务器程序的时候,发现请求量大的时候,程序发生崩溃,原因是我传入某个函数的string的size()过大。
这个程序是一个典型的生产者/消费者:生产者产生的信息放入 string,然后加锁放入std::queue中;消费者线程加锁,从std::queue.front()中获得对象的应用,然后pop()队头元素。一切看起来都是那么清晰简单。
消费者的代码看起来就像是这样:
为什么从队列取出string后,size就变了?
试了很多种方法,最后只删除了一个符号,程序就正常了:
通过上面的问题的解决,我了解了:原来queue的pop()方法会调用string的析构函数,引用指向一个已经析构的对象,当然会出错。
真的是这样吗?我又做了如下的三个实验:
//--------------------- test_queue_pop.cpp-----------------------------
为什么呢?为什么pop()仅仅只在多线程环境下才调用对象的析构函数?这只能理解为stl的bug了。
还好,总是使用operator=就好!
- std::queue
- std::queue
- std::queue
- std::queue
- std::queue用法
- c++11 container liber: std::queue std::map std::vector std::unique_ptr
- acm算法之std::queue与std::stack
- C++队列模板使用std::queue
- C++/C++11中std::queue的使用
- C++11:基于std::queue和std::mutex构建一个线程安全的队列
- 【C++ STL应用与实现】13: 如何使用std::queue和std::priority_queue
- std::stack<T>和std::queue<T>在执行频率比较高的程序中,效率太低
- std
- std
- std
- C++ 不用std::queue 实现读取网络字节缓冲去的队列
- Queue
- queue
- java通过暴力反射创建不可实例化类的对象实例
- 从1到1000的数打印出来
- Windows CE下开发控制面板应用程序
- 正则表达式匹配Flash
- WCF从理论到实践(1):揭开神秘面纱
- std::queue
- Multithread chips
- Stucts 乱码问题
- 【C++常识】C++输入输出流
- /etc/passwd & /etc/shadow 详解
- 阅读:抽象词(贵在坚持)
- struts1.2与struts2的区别
- jQuery获取Select选择的Text和 Value(转)
- Linux远程访问练习题