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

网站建设维护工作经验温州专业网站开发网站设计

网站建设维护工作经验,温州专业网站开发网站设计,湖南省建设厅官网查询,番禺网站开发价格对象的生与死不能由对象自身拥有的mutex(互斥器)来保护. 如何避免对象析构时可能存在的race condi​t​ion(竞态条件)是C多线程编程面临的基本问题。 对象的销毁可能出现多种竞态条件(race condi​t​ion): 在即将析构…

对象的生与死不能由对象自身拥有的mutex(互斥器)来保护.
如何避免对象析构时可能存在的race condi​t​ion(竞态条件)是C++多线程编程面临的基本问题。
对象的销毁可能出现多种竞态条件(race condi​t​ion):
· 在即将析构一个对象时,从何而知此刻是否有别的线程正在执行该对象的成员函数?
· 在调用某个对象的成员函数之前,如何得知这个对象还活着?它的析构函数会不会碰巧执行到一半?

一个线程安全的class应当满足以下三个条件:
· 多个线程同时访问时,其表现出正确的行为。
· 无论操作系统如何调度这些线程,无论这些线程的执行顺序如何交织(interleaving)。
· 调用端代码无须额外的同步或其他协调动作。

C++标准库里的大多数class都不是线程安全的,包括std::string、std::vector、std::map等,因为这些class通常需要在外部加锁才能供多个线程同时访问。

MutexLock与MutexLockGuard
MutexLock一般是别的class的数据成员。
MutexLockGuard封装临界区的进入和退出,即加锁和解锁。MutexLockGuard一般是个栈上对象,它的作用域刚好等于临界区域.

一个线程安全的Counter示例

// A thread-safe counter
class Counter : boost::noncopyable
{public:Counter() : value_(0) {}int64_t value() const;int64_t getAndIncrease();private:int64_t value_;mutable MutexLock mutex_;
};int64_t value() const
{MutexLockGuard lock(mutex_);return value_;
}int64_t getAndIncrease()
{MutexLockGuard lock(mutex_);int64_t ret = value_++;return ret;
}

对象的创建很简单
· 不要在构造函数中注册任何回调;
· 也不要在构造函数中把this传给跨线程的对象;
· 即便在构造函数的最后一行也不行。
不要泄露this, 别的线程有可能访问这个半成品对象,这会造成难以预料的后果


// don't do this
class Foo : public Observer
{public:Foo(Observer* s){s->register_(this);  // error, not thread safe}virtual void update();
};// do this
class Foo : public Observer
{public:Foo();virtual void update();void observe(Observer* s){s->register_(this);  }
};Foo* pFoo = new Foo;
Observable* s = getSubject();
pFoo->observe(s);  // two phase call, or call s->register_(pFoo);

二段式构造——即构造函数+ini​t​ial​ize()——有时会是好办法,这虽然不符合C++教条,但是多线程下别无选择
即使构造函数的最后一行也不要泄露this,因为Foo有可能是个基类,基类先于派生类构造,执行完Foo:​:Foo()的最后一行代码还会继续执行派生类的构造函数,这时most-derived class的对象还处于构造中,仍然不安全。

相对来说,对象的构造做到线程安全还是比较容易的,毕竟曝光少,回头率为零

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

相关文章:

  • 大淘客官网做的网站打不开网页制作三剑客即
  • 广告公司做网站专业房地产网站建设
  • 义乌公司网站软件开发项目总结
  • 利搜网站排名软件做网站来钱快
  • 网站的优点和缺点山西省建设厅网站
  • 仿hao123的导航网站纯静态版|html导航网站源码做空eth网站
  • 企业营销推广型网站建设wordpress另一更新进行中
  • 学校网站开发工程师商业网站设计方案模板
  • 广陵区建设局网站凡客t恤
  • 东莞做网站定制阿里指数网站
  • 北京最大专业网站建设腾讯邮箱网页版登录
  • 学做网站论坛VIP怎么样软文推广代写代发
  • 网站什么也没动怎么不收录啦设计师常用的图片网站
  • 电商网站建设开发的语言有哪些仿win8 html5微网站纯手工代码
  • 用本地机器做网站服务器大学网页设计作业
  • 网站建设方案的摘要福建省住房建设厅网站
  • 谁需要做网站的嘉兴如何布置网站
  • 石家庄网站网站建设室内设计公司排名十强
  • 网站开发者的常用工具百度seo快速排名优化服务
  • 财务公司代理记账怎么收费长沙正规竞价优化服务
  • 江门网站建设维护宁波网站建设联系方法
  • 网站素材大全齐鲁石化建设公司官网
  • wordpress文章都展现在一个页面商城网站优化
  • 网站开发给网站设置图标在什么文件中写代码网站开发技术包括什么
  • 宁波搭建网站公个人网站建设优化
  • 做ppt的模板的网站有哪些内容wordpress友情链接定时
  • 专业网站建设最便宜中国站长之家官网
  • 做网站网络公司无收入珠海网站建设方案维护
  • 湖南智能网站建设哪家好北方明珠网站建设
  • 网站开发 英文文章软件商城推荐