当前位置: 首页 > news >正文

网站制作模版百度app打开

网站制作模版,百度app打开,营口建设信息网站,电商seo是什么意思啊std::stack容器的接口包括 empty(), size(), top(), push(), pop()等。 问题 其原接口在多线程的情况下,会持续很多问题。 例如,在std::stack容器的接口中,在多线程下应用时,empty()和size()的结果是不可信的。因为尽管在某线程…

std::stack容器的接口包括 empty(), size(), top(), push(), pop()等。

问题

其原接口在多线程的情况下,会持续很多问题。

例如,在std::stack容器的接口中,在多线程下应用时,empty()和size()的结果是不可信的。因为尽管在某线程调用empty()或size()时,返回值可能是正确的,但是一旦函数返回,其他线程就不再受限,从而能自由地访问栈容器,可能马上会有新元素入栈,或者现有的元素立即出栈,这会使前面线程得到的结果失效。

其次,top()和pop()之间也存在着竞争条件,例如

线程A线程B
if(!s.empty());
if(!s.empty());
 int const value = s.top();
 int const value = s.top();
s.pop()
do_something(value);s.pop()
do_something(value);

假设,当前只有两个线程正在运行,且在两个top()调用之间不存在其他操作,那么栈容器不会被更改,即两个线程会得到相同的值。另外,在top()与pop()的调用之间也没有其他调用,结果栈顶元素被调用了两次,但栈顶的第二个元素却始终没被读取就丢弃了。

解决方法

为了线程安全,在每次操作之前,都加锁

面对第二个问题,将top()和pop()操作合二为一

#include <memory>
#include <mutex>
#include <stack>using namespace std;struct empty_stack :std::exception
{const char* what() const throw();
};template<typename T>
class threadsafe_stack
{
private:stack<T> data;mutable mutex m;public:threadsafe_stack() {};threadsafe_stack(const threadsafe_stack& other){lock_guard<mutex> lock(other.m);data = other.data;}threadsafe_stack& operator=(const threadsafe_stack&) = delete;void push(T new_value){lock_guard<mutex> lock(m);data.push(move(new_value));}shared_ptr<T> pop(){lock_guard<mutex> lock(m);if (data.empty()) throw empty_stack();shared_ptr<T>const res(std::make_shared<T>(data.top()));data.pop();return res;}void pop(T& value){lock_guard<mutex> lock(m);if (data.empty()) throw empty_stack();value = data.top();data.pop();}bool empty() const{lock_guard<mutex> lock(m);return data.empty();}
};

http://www.yayakq.cn/news/547576/

相关文章:

  • 做网站时背景图片浮动wordpress 死链提交
  • 用dw做网站的代码软装设计师
  • 中国空间站是干什么的设置网站字体
  • 淅川网站建设四川网站建设设计公司
  • 宝丰县建设局网站秦皇岛建设局招标网
  • 免费ppt下载网站淄博网站建设优化
  • 创建自由摄影师的网站内容汉阳网站推广
  • 惠州建设工程交易网站载wordpress
  • 网站建设开票名称做网站办的营业执照用交税吗
  • 深圳市设计网站模板图片背景
  • 门户网站建设的成果制作网页软件教程
  • 运城网站推广哪家好网站底部友情链接代码
  • 东莞网站建设黄页免费软件网站系统怎么做的
  • 如何让网站被收录互联网技术发展及其影响的调查
  • 西安做网站公司哪个好做美食网站的素材
  • 有什么做衣服的网站吗秦皇岛网站制作定制
  • 云南电子政务网站建设用iis做网站
  • 外贸网站产品珠海市住房和建设局网站
  • 茂名模板建站代理求几个微信推广平台
  • 站长之家网站排行榜网站首页排名seo搜索优化
  • 发卡网站建设7az火车头发布模块wordpress5.0
  • 网站开发和c语言天元建设集团有限公司2008年招聘
  • 浙江省建设工程招投标网站网站制作新报价
  • 网站建设增城WordPress 微信采集助手
  • 长尾关键词网站网站制作一个人可以做吗
  • 个人网站每年要多少钱centos7 wordpress安装
  • 网站建设 搜狐js特效演示网站
  • 山东建设厅官方网站二建报名小学学校网站建设计划
  • 做视频找素材的网站有哪些外贸网络推广员
  • 开发商城网站公司做信息图的网站