[Chromium]如何安全的使用PostTask

原创 2016年01月09日 01:25:19

PostTask参数决策树



如何传递绑定的对象

官方的解释总是最权威,有疑问看这里或者直接看代码中的说明: bind_helpers.h. 

传值方式描述
this 或 对象指针

如果对象本身是一个RefCountedThreadSafe, 没有问题.

如果是个裸指针,应当尽量避免,除非你可以保证它的线程安全.

base::Unretained

注意:使用这个的前提是有其它同步机制保障对象的生命周期.

  1. 如果有其它同步机制保障对象的生命周期,可以使用Unretained()传递非引用计数的对象.
  2. 如果是一个非引用计数的对象,可以使用Unretained()封装起来.
base::Owned

如果是临时对象,或者担心任务执行完成后对象可能出现泄露,可以使用Owned, 表示由Task

持有对象的所有权,在结束时析构它.

base::Passed如果要执行Task需要传入scoped指针,就可以使用它转换,它也可以避免拷贝,而是类似move语义.
base::ConstRef类似常量引用,不希望bind过程出现拷贝,就可以使用它.
base::IgnoreResult如果Task要调用的方法带有返回值,而你又不关心返回值就可以使用IgnoreResult来传入对象指针.

 

讨论:为什么要避免引用计数?

如果这样一直将以引用计数来使用对象岂不最为简单,为什么要避免引用计数?

Chromium智能指针指引中的解释:

  • Reference-counted objects make it difficult to understand ownership and destruction order, especially when multiple threads are involved. There is almost always another way to design your object hierarchy to avoid refcounting. Avoiding refcounting in multithreaded situations is usually easier if you restrict each class to operating on just one thread, and use PostTask() and the like to proxy calls to the correct thread. base::Bind(), WeakPtr, and other tools make it possible to automatically cancel calls to such an object when it dies. Note that too much of our existing code uses refcounting, so just because you see existing code doing it does not mean it's the right solution. (Bonus points if you're able to clean up such cases.)

还可以参考: 谨慎使用智能指针

参考

关于Callback和Bind对对象所有权更完整的解释



Chromium多线程模型设计和实现分析

Chromium除了远近闻名的多进程架构之外,它的多线程模型也相当引人注目的。Chromium的多进程架构是为了解决网页的稳定性问题,而多线程模型则是为了解决网页的卡顿问题。为了达到这个目的,Chro...
  • Luoshengyang
  • Luoshengyang
  • 2015年07月27日 00:59
  • 21685

iOS学习----------AFNetworking(5)NSURLSessionTask创建

上两篇中介绍了如何创建不同格式的request、序列化请求参数和处理响应数据、对数据进行格式化(JSON/XML)处理。接下来这一篇进行NSURLSessionTask创建进行详细分析(重点)。 ...
  • yziOS
  • yziOS
  • 2016年03月03日 22:03
  • 1526

chromium浏览器安全机制

  • 2011年04月17日 13:35
  • 1.11MB
  • 下载

【Chromium中文文档】安全浏览--Chrome中的警告都是怎么来的?

Chromium中文文档 安全浏览
  • u011453773
  • u011453773
  • 2016年04月08日 10:49
  • 3584

解决chromium对诺顿Norton安全插件不支持的兼容性问题

Hi all,诺顿安全插件,安装完后,在chrome上可以使用,在chromium上无法使用 具体现象上图:     Chrome 可以正常使用:       分析发现,诺顿插...
  • yujiankk
  • yujiankk
  • 2013年06月26日 15:58
  • 1461

Base64系列第四篇 C/C++中使用Base64编码解码(从chromium库中抽取)

  • 2013年10月19日 18:14
  • 300KB
  • 下载

使用vs2008编译64位的Cefsharp (chromium版本:v47)

  • 2017年02月02日 23:47
  • 3KB
  • 下载

使用代理同步Chromium代码的心得

先参看 http://www.chromium.org/developers/how-tos/build-instructions-windows 非常坑爹,谷歌获取chromium源码的方式又...
  • QHH_QHH
  • QHH_QHH
  • 2015年10月12日 19:30
  • 2536

chromium/chrome 常用使用技巧

地址栏快捷方式在地址栏,进行下列操作之一:键入搜索字词 使用默认搜索引擎进行搜索键入网址中"www."和 ".com"之间的部分,然后按 Ctrl+Enter 为您在地址栏中输入的内容添加"www."...
  • ustc_dylan
  • ustc_dylan
  • 2011年01月09日 22:04
  • 2316

审查元素的使用(IE,Chromium 网页调试)

http://www.chromechina.com/thread-5166-1-1.html 审查元素功能窗口(Developer Tools)里又分为六个子功能,分别为Eleme...
  • TianGaojie123abc
  • TianGaojie123abc
  • 2012年07月30日 12:03
  • 5534
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Chromium]如何安全的使用PostTask
举报原因:
原因补充:

(最多只允许输入30个字)