设为首页 加入收藏

TOP

1.1 当析构函数遇到多线程
2013-10-07 16:02:32 来源: 作者: 【 】 浏览:55
Tags:1.1 函数 遇到 线程

第1章 线程安全的对象生命期管理

编写线程安全的类不是难事,用同步原语(synchronization primitives)保护内部状态即可。但是对象的生与死不能由对象自身拥有的mutex(互斥器)来保护。如何避免对象析构时可能存在的race condition(竞态条件)是C++(www.cppentry.com) 多线程编程(www.cppentry.com)面临的基本问题,可以借助Boost 库中的shared_ptr 和weak_ptr 1 完美解决。这也是实现线程安全的Observer 模式的必备技术。

本章源自2009 年12 月我在上海祝成科技举办的C++(www.cppentry.com) 技术大会的一场演讲《当析构函数遇到多线程》,读者应具有C++(www.cppentry.com) 多线程编程(www.cppentry.com)经验,熟悉互斥器、竞态条件等概念,了解智能指针,知道Observer 设计模式。

1.1 当析构函数遇到多线程

与其他面向对象语言不同,C++(www.cppentry.com) 要求程序员自己管理对象的生命期,这在多线程环境下显得尤为困难。当一个对象能被多个线程同时看到时,那么对象的销毁时机就会变得模糊不清,可能出现多种竞态条件(race condition):

在即将析构一个对象时,从何而知此刻是否有别的线程正在执行该对象的成员函数?

如何保证在执行成员函数期间,对象不会在另一个线程被析构?

在调用某个对象的成员函数之前,如何得知这个对象还活着?它的析构函数会不会碰巧执行到一半?

解决这些race condition 是C++(www.cppentry.com) 多线程编程(www.cppentry.com)面临的基本问题。本文试图以shared_ptr 一劳永逸地解决这些问题,减轻C++(www.cppentry.com) 多线程编程(www.cppentry.com)的精神负担。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇6.4.3 七步实现finger 服务(3) 下一篇1.1.1 线程安全的定义

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·MySQL 安装及连接-腾 (2025-12-25 06:20:28)
·MySQL的下载、安装、 (2025-12-25 06:20:26)
·MySQL 中文网:探索 (2025-12-25 06:20:23)
·Shell脚本:Linux Sh (2025-12-25 05:50:11)
·VMware虚拟机安装Lin (2025-12-25 05:50:08)